This question already has an answer here:
How could I create a new smart contract token and copy the balance of every address from an old contract.
Essentially fork a contract.
I want to make this a one time function in the contract so that it can only be called once. Or even better do it during the contract creation.