У меня есть код 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
Гарантированно ли создание списка из списка сделает копию? ⇐ Python
Программы на Python
-
Anonymous
1730265016
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
Подробнее здесь: [url]https://stackoverflow.com/questions/79139716/is-constructing-a-list-from-a-list-guaranteed-to-make-a-copy[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия