34

copy.copy()copy.deepcopy()タプルのような不変オブジェクトの参照をコピーするだけです。最初の不変オブジェクトの複製コピーを別のメモリ位置に作成するにはどうすればよいですか?

4

3 に答える 3

42

あなたが探してdeepcopyいる。

from copy import deepcopy

tup = (1, 2, 3, 4, 5)
put = deepcopy(tup)

確かに、これら2つのタプルのIDは同じアドレスを指します。タプルは不変であるため、まったく同じである別のコピーを作成する理由は実際にはありません。ただし、タプルには可変要素を含めることができ、deepcopy/idは予想どおりに動作することに注意してください。

from copy import deepcopy
tup = (1, 2, [])
put = deepcopy(tup)
tup[2].append('hello')
print tup # (1, 2, ['hello'])
print put # (1, 2, [])
于 2013-03-05T02:06:29.597 に答える
25

空のタプルを追加します。

>>> a = (1, 2, 3)
>>> a is a+tuple()  
False

タプルを連結すると、結果が等しいことが判明した場合でも、常に新しい個別のタプルが返されます。

于 2013-03-05T02:03:53.857 に答える
4

これを試して:

tup = (1,2,3)
nt = tuple(list(tup))

そして、空のタプルを追加する方がはるかに優れていると思います。

于 2013-03-05T02:14:26.040 に答える