Подтвердить что ты не робот

Как я могу скопировать неизменяемый объект, такой как кортеж в Python?

copy.copy() и copy.deepcopy() просто скопируйте ссылку для неизменяемого объекта как кортеж. Как создать дублируемую копию первого неизменяемого объекта в другой ячейке памяти?

4b9b3361

Ответ 1

Вы ищете deepcopy.

from copy import deepcopy

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

По общему признанию, идентификатор этих двух кортежей укажет на тот же адрес. Поскольку кортеж является неизменным, на самом деле нет никакого смысла создавать другую его копию, точную. Однако обратите внимание, что кортежи могут содержать изменчивые элементы, а 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, [])

Ответ 2

Добавьте к нему пустой кортеж:

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

Конкатенация кортежей всегда возвращает новый отдельный кортеж, даже если результат оказывается равным.

Ответ 3

попробуйте следующее:

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

И я думаю, что добавление пустого кортежа намного лучше.