web-dev-qa-db-fra.com

Comment puis-je copier un objet immuable comme Tuple en Python?

copy.copy() et copy.deepcopy() copiez simplement la référence d'un objet immuable, tel qu'un tuple. Comment créer une copie du premier objet immuable sur un emplacement de mémoire différent?

15
user1403483

Vous recherchez deepcopy.

from copy import deepcopy

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

Certes, l'ID de ces deux n-uplets désignera la même adresse. Comme un tuple est immuable, il n’ya aucune raison de créer un autre exemplaire identique. Cependant, notez que les n-uplets peuvent contenir des éléments mutables, et deepcopy/id se comporte comme vous le supposeriez:

from copy import deepcopy
tup = (1, 2, [])
put = deepcopy(tup)
tup[2].append('hello')
print tup # (1, 2, ['hello'])
print put # (1, 2, [])
24
Makoto

Ajoutez le tuple vide à cela:

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

La concaténation des n-uplets retourne toujours un nouveau tuple distinct, même lorsque le résultat s'avère être égal.

17
lvc

essaye ça:

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

Et je pense que l'ajout d'un tuple vide est beaucoup mieux.

1
Wiki Zhao