Public Keys are not accounts where money is stored but just an X and Y coordinate on a graph.
Mind blowing.
To keep going with mind blowing concepts...
There is no such thing as "a bitcoin" that gets sent or received anywhere.
Transactions in the blockchain just list "outputs" which are encumbered with a requirement that must be met if you want to use that output as an input to another transaction. Once an output is successfully used as an input in a transaction in the blockchain, it can never be used as an input to any other transaction again. Typically the hash of the public key is used with a small script (effectively a small computer program embedded in the output) to describe what requirement must be met.
It is also possible to use that scripting language (effectively a programming language) to encumber outputs with other requirements that have nothing to do with a public key at all. In many cases, those requirements can't currently be represented as a bitcoin address. So, while that value (those bitcoins?) may be useable in transactions, it isn't stored at an "address" and it isn't spent "from" an address.
In other words...
While many may use this system of programs and data that describe access to the blockchain as "currency" or "commodity". Really all that technically exists is computer programs stored in a database that describe who else is allowed to add more computer programs to that same database, and what the rules are for adding such programs. There is no "currency", there is no "commodity". It's all imaginary in our heads. There are only those that have programming rights, and their ability to reassign some of those programming rights to others.
Wallets don't technically "move" bitcoins. They simply write the computer programs for those that don't understand how.
When you "acquire bitcoins", what you are actually doing is acquiring the right to add a computer program to the database from someone else that is giving up some of that right in exchange for some product or service.