2013-12-14 91 views
1

我正在学习Python。是否有人可以帮助我了解以下两者之间的区别:VS A = X A = X [:]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

仅限于列表(OP未指定对象)。 – 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

尝试t 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] 
>>> 
相关问题