[python]コピー、可変について


この文章は次のリンクを参考にして勉強のために書いたものです。


アップグレード先
Pythonのオブジェクト向けについて
エンジニアリング向けPython
Shallow CopyとDeep Copy
Pythonから学ぶときは、コピーや可変の概念を混同し、関連する内容を集中的に整理します.

1.変数とオブジェクト


Pythonでは、変数は割り当てられたオブジェクトのアドレスを指します.
a = 3
上記のコードを実行すると、まず3という整数タイプのオブジェクトがメモリに割り当てられます.
このとき、割り当てられたメモリ内のオブジェクトのアドレスは、aという変数によって指し示され、bindingと呼ばれる.

2.オブジェクトのタイプ



➕ ndarray : mutable
Pythonでは、オブジェクトには、作成後に値を変更できるかどうかの2つのタイプがあります.
可変:変更可能
immutable:変更不可
オブジェクトの値を変更できるのは、値を変更しても同じメモリアドレスを持つことです.
したがって、実際にコードを実行すると、以下の結果が得られます.
x = [1,2,3]
y = x
print(id(x))
print(id(y))
y[0] = 3
print(id(y))
print(id(x))
2062815432192
2062815432192
2062815432192
2062815432192
オブジェクトの値を変更できない場合はどうなりますか?オブジェクトとバインドされた変数を利用して理解するのは簡単です.
>> x = 1
>> y = x
>> id(1)
140706521527120
>> id(x)
140706521527120
>> id(y)
140706521527120
>> y += 3
>> id(y)
140706521527216
オブジェクトの値は変更できないため、変数は最終的に他のオブジェクトにバインドされます.

3. Deep, Shallow Copy


1枚の写真でDeep、Shallow Copyとは何かがわかります.

Shallow Copyの場合、同じオブジェクトを指しますので、可変変数の処理には注意してください.
どうして?(🐿️) オブジェクトの値を変更できます.したがって、1つの変数の変化は他の変数に影響します.
👉Deep Copyの活用

ではなぜShallow Copyがあるのでしょうか。


Shallow Copyは同じオブジェクトを共有するため、メモリを節約し、より高速に実行できます.