2012-04-22 4 views
4

Он копирует список правильно? но в коде я смотрю его x = x[:], которого я не понимаю. Как обе копии можно назвать одной и той же?Как [:] работает в python?

+8

Это то же самое, что у вас есть 'a = a + 1'. Первый «a + 1» оценивается, и результат переопределяет текущее значение 'a'. Хотя 'x = x [:]' кажется ненужным, если только 'x' не является параметром функции, и вы хотите принудительно выполнить копию аргумента. –

ответ

6

Право сначала оценивается, помещается во временную переменную, а x присваивается переменной temp. Конечно, вы этого не увидите.

2

Чтобы ответить на ваш вопрос «Как работает [:] на 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[:] и в этом контексте это назначение послужит полезной цели (хотя мы не знаем, в каком контексте вы пришли через это изначально).

+1

Я думаю [комментарий Феликса] (http://stackoverflow.com/questions/10273186/how-does-work-in-python#comment13212644_10273186) попадает в гвоздь на голове _why_ это будет сделано. – sarnold

+2

@sarnold хорошая точка .. просто видел это тоже. Думаю, я пошёл по самому вопросу: «Как работает [:] в python». – Levon

+0

Вы бы полностью сделали x = x [:], чтобы дублировать существующий список – richo

Смежные вопросы