基本的には、b = a
ポイントb
からa
ポイントまでです。
あなたが求めているのは、変更可能なタイプです。数字、文字列、タプル、フーチェンセット、ブール値None
は不変です。リスト、辞書、セット、bytearraysは変更可能です。
私は可変タイプを作る場合
、
list
のように:
>>> a = [1, 2] # create an object in memory that points to 1 and 2, and point a at it
>>> b = a # point b to wherever a points
>>> a[0] = 2 # change the object that a points to by pointing its first item at 2
>>> a
[2, 2]
>>> b
[2, 2]
彼らは両方ともまだ同じ項目を指します。
私もあなたの元のコードにコメントます:
>>>a=5 # '5' is interned, so it already exists, point a at it in memory
>>>b=a # point b to wherever a points
>>>a=6 # '6' already exists in memory, point a at it
>>>print b # b still points at 5 because you never moved it
5
何かがid(something)
をすることによってメモリ内を指しているあなたは、常に見ることができます。
>>> id(5)
77519368
>>> a = 5
>>> id(a)
77519368 # the same as what id(5) showed us, 5 is interned
>>> b = a
>>> id(b)
77519368 # same again
>>> id(6)
77519356
>>> a = 6
>>> id(a)
77519356 # same as what id(6) showed us, 6 is interned
>>> id(b)
77519368 # still pointing at 5.
>>> b
5
構造体のコピーを作成する場合は、copy
を使用します。ただし、はまだ何かのコピーを作成しませんinterned。これには、256
,True
,False
,None
などの短い文字列、a
などの短い文字列が含まれます。基本的には、ほとんどは使用しないでくださいあなたがインターンに邪魔されないことが確実でない限り、
>>> a = [1, 2]
>>> b = a
>>> a = a[:1] # copy the list a points to, starting with item 2, and point a at it
>>> b # b still points to the original list
[1, 2]
>>> a
[1]
>>> id(b)
79367984
>>> id(a)
80533904
リスト(あなたが使用するたびに:
)を作るのスライス:
は古い変数を変更していない、まだ新しいものでは一つの変数を指して、でも変更可能なタイプで示したもう一つの例を考えてみましょうコピー。
出典
2011-08-12 22:39:15
agf
Pythonでの割り当て* never *は値をコピーします。 –