Гарантированно ли создание списка из списка сделает копию?Python

Программы на Python
Ответить
Anonymous
 Гарантированно ли создание списка из списка сделает копию?

Сообщение Anonymous »

У меня есть код Python, который принимает итерируемый объект (список, кортеж, выражение генератора или любой другой итерируемый объект) и должен скопировать его в новый список.
Следующее работает:
newlist = [x for x in olditerable]

Но мне интересно, могу ли я сделать это вместо этого:
newlist = list(olditerable)

Очевидно, что он работает так, как требуется (создает копию), если olditerable не список.
Менее очевидно, что он также работает так, как требуется (делает копию), когда olditerable является списком:
oldlist = [1,2,3]
newlist = list(oldlist)
assert newlist is not oldlist # so it didn't just return oldlist
oldlist.append("appended to oldlist")
newlist.append("appended to newlist")
print(f"oldlist is {oldlist}")
print(f"newlist is {newlist}")

Вывод дополнительно подтверждает, что новый список не является старым списком:
oldlist is [1, 2, 3, 'appended to oldlist']
newlist is [1, 2, 3, 'appended to newlist']

Гарантировано ли такое копирование? Так или иначе, мне не удалось найти никакой документации по этому поводу.
Напротив, tuple(oldtuple) не создает копировать (конечно, это было бы глупо, поскольку кортежи неизменяемы):
oldtuple = (1,2,3)
newtuple = tuple(oldtuple)
assert newtuple is oldtuple


Подробнее здесь: https://stackoverflow.com/questions/791 ... ake-a-copy
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»