Modelling an account manager in OOP
I would follow semantics.

Persons are not Accounts. A person may have multiple accounts. Either you rename Person to Account or you have a separate class "Account" so you have following semantic: Amy  transfers 500 from her Account 638423331 to an Account 747266783 that belongs to John.

Transactions are not bound to Accounts. They are on the level of the system which tries to ensure consistency. Sure you can have a list of transactions in each account the account was participant. But that is semantically redundant (denormalized) and has to be synchronized. So I suggest to introduce a class "Accountingsystem" that holds all transactions that keeps the whole consistent.

So my preferred model:

Accountingsystem knows all Persons, all Accounts and all transactions

An account knows its balance and its owner that must be one of the known Persons.

A Transaction knows the accounts participated and the debit/credit amount.

You can have convinience methods to filter transactions or which accounts belong to a person within the accountingsystem.