小甲魚python課後題--第12課0題


原題:
注意してください.この問題は授業の問題と少し違います.答えが終わったら、実験に行ったり、答えを参考にしたりしてください.
old = [1, 2, 3, 4, 5]
new=old
old=[6]
print(new)

もし機械に乗らなければ、どんな内容が印刷されると思いますか?
印刷結果は[6]と思っていたが、結果印刷結果は[1,2,3,4,5]で、とても難解で、id()でメモリアドレスを調べて、どうやって来たのかが分かった.
ステップ1:
old=[1,2,3,4,5]
id(old)
52847496

変数oldを定義し、割り当て値は[1,2,3,4,5]であり、メモリ内のアドレスは52847496である.
ステップ2:
new=old
id(new)
52847496
id(old)
52847496

変数newを定義し、old変数に割り当てます.この場合、割り当てはold変数が指すメモリアドレスを参照します.
ステップ3:
old=[6]
id(old)
52499336
id(new)
52847496
は[6]をold変数に付与し、このときold変数は、元の52847496メモリアドレスが指す空間の値を[6]に変更するのではなく、メモリに新しいメモリ空間を開いて[6]格納し、oldがこのメモリ空間を指すアドレスを指す.そこでoldを修正する自然はnewと何の関係もなく、newも自然に元のメモリアドレス52847496を指し、自然print(new)の結果は[1,2,3,4,5]である.