Он копирует список правильно? но в коде я смотрю его x = x[:]
, которого я не понимаю. Как обе копии можно назвать одной и той же?Как [:] работает в python?
ответ
Право сначала оценивается, помещается во временную переменную, а x присваивается переменной temp. Конечно, вы этого не увидите.
Чтобы ответить на ваш вопрос «Как работает [:] на python?» немного сложнее в контексте данного конкретного выражения сама по себе
x = x[:]
, не в том, что может произойти, как это на самом деле, как говорят a = a
.
Вы, скорее всего, чтобы увидеть что-то вроде
a = x[:]
, который в простых словах делает копию списка ссылается x
и присваивает его a
.
Если вы просто сделали
a = x
обе переменные будут ссылаться на то же место, и любое изменение в любой из переменных будет отражено в обоих.
Вот что происходит, если вы не используете обозначения двоеточие, например, a = x
:
In [31]: x = range(5)
In [32]: a = x
In [33]: a
Out[33]: [0, 1, 2, 3, 4]
In [34]: x
Out[34]: [0, 1, 2, 3, 4]
In [35]: a[3] = 99 # I am making a change in a
In [36]: a
Out[36]: [0, 1, 2, 99, 4]
In [37]: x
Out[37]: [0, 1, 2, 99, 4] # but x changes too!
Сравните это с a = x[:]
In [38]: x = range(5)
In [39]: a = x[:]
In [40]: a
Out[40]: [0, 1, 2, 3, 4]
In [41]: x
Out[41]: [0, 1, 2, 3, 4]
In [42]: a[3] = -99
In [43]: a
Out[43]: [0, 1, 2, -99, 4] # a changes
In [44]: x
Out[44]: [0, 1, 2, 3, 4] # x does not change
Примечание: @gnibbler обеспечивает короткий и полный пример (ниже в комментариях ), где вы можете столкнуться с x = x[:]
и в этом контексте это назначение послужит полезной цели (хотя мы не знаем, в каком контексте вы пришли через это изначально).
Я думаю [комментарий Феликса] (http://stackoverflow.com/questions/10273186/how-does-work-in-python#comment13212644_10273186) попадает в гвоздь на голове _why_ это будет сделано. – sarnold
@sarnold хорошая точка .. просто видел это тоже. Думаю, я пошёл по самому вопросу: «Как работает [:] в python». – Levon
Вы бы полностью сделали x = x [:], чтобы дублировать существующий список – richo
- 1. Как работает% в Python
- 2. Как работает генератор в python?
- 3. Как работает python в списке?
- 4. Как работает elif в Python?
- 5. Как str.join работает в python
- 6. Как работает heapq.merge в python
- 7. Как работает фильтрация в Python?
- 8. Как работает multiprocessing.Manager() в python?
- 9. Как работает execfile() в python?
- 10. Как полиморфизм работает в Python?
- 11. Как рекурсия работает в Python
- 12. Как работает обратное в python
- 13. Как modulo% работает в python
- 14. Как работает Inheritance в Python
- 15. Как работает Deque в Python
- 16. Как работает поиск в python?
- 17. Как работает «все» в Python?
- 18. Как работает знак @ в Python?
- 19. Как работает python?
- 20. Как работает asyncio (python)?
- 21. python: как работает привязка
- 22. Как работает python webdriver?
- 23. Как работает Python setuptools?
- 24. Как работает% на Python?
- 25. Как работает python random.Random.seed?
- 26. Как работает Bisect Python?
- 27. Python: Как работает набор
- 28. Python: Как работает os.fork()?
- 29. Как работает сеть Python?
- 30. Как работает оператор Python *?
Это то же самое, что у вас есть 'a = a + 1'. Первый «a + 1» оценивается, и результат переопределяет текущее значение 'a'. Хотя 'x = x [:]' кажется ненужным, если только 'x' не является параметром функции, и вы хотите принудительно выполнить копию аргумента. –