2013-12-14 3 views
1

Я пытаюсь изучить Python. Может кто-то пожалуйста, помогите мне понять разницу между следующие два: а = х против а = х [:]Какая разница между a = x и a = x [:] в python

+0

Подсказка: что делает 'a.slice (0)' делать в javascript? –

+1

Невозможно сказать, если вы не скажете, что такое 'a'. Для кортежей оба - одно и то же. – JBernardo

+0

@JBernardo Я думаю, вы имеете в виду «[...], что такое' x'. Это верно, хотя для большинства хорошо выполненных типов (включая кортежи, что мелкая копия ничего не делает, это просто оптимизация), ее поведение идентично случаю списка, по модулю обманывая с помощью id() '/' is'. – delnan

ответ

5

a = x создает ссылку:

a = [2] 
x = a 
print id(a) 
print id(x) 

производит:

39727240 
39727240 

Так что если вы меняете a, тогда x тоже изменится, потому что это те же объекты

В то время как

a = x[:] создает новый объект

a = [2] 
x = a[:] 
print id(a) 
print id(x) 

производит:

41331528 
39722056 

Но здесь изменение a не изменяет x, потому что они имеют разные объекты

+0

Только для списков (ОП не указывал объект). – JBernardo

+0

@JBernardo python - это OP, поэтому даже список - это объект в python –

+0

Я имею в виду, например. для кортежей это не так. – JBernardo

1
In [648]: b = a 

In [649]: b[0] = 2 

In [650]: a 
Out[650]: [2] <- a also changed 

In [651]: b = a[:] <- Creating new object 

In [652]: b[0] = 3 

In [653]: b 
Out[653]: [3] 

In [654]: a 
Out[654]: [2] <- a did not change 
2

Попытка o объяснение:

>>> x = [1,2,3] 
>>> a = x 
>>> # a is reference to x - a[0] and x[0] are same variable 
>>> a[0] = 4 # same as x[0]... 
>>> print x # proof 
[4, 2, 3] 
>>> a = x[:] # a is copy of x 
>>> a[2] = 5 # a[2] is not x[2] 
>>> print x 
[4, 2, 3] 
>>> print a 
[4, 2, 5] 
>>> 
Смежные вопросы