在python中分配值,结果与预期不符

时间:2013-12-13 18:47:52

标签: python variables reference

我有这段代码:

x = 'x'
y = []
y.append(x)
z = y
z.append('a')
x = 'X'

print "x:", x
print "y:", y
print "z:", z

输出:

x: X
y: ['x', 'a']
z: ['x', 'a']

我知道这是正确的输出,但我很难理解它产生的原因

y: ['x', 'a']

而不是

y: ['x']

2 个答案:

答案 0 :(得分:6)

通过将y分配给z,您没有创建列表的副本。您只是创建了对同一列表对象的另一个引用。

如果您希望y成为列表的副本,则需要明确创建此类副本:

z = list(y)

z = y[:]

答案 1 :(得分:1)

您当前的代码会将z创建为引用y本身。意思是,zy都指向内存中的相同列表对象。

要解决此问题,请z {em}复制 y而不是对其的引用:

z = y[:]

以下是演示:

>>> x = 'x'
>>> y = []
>>> y.append(x)
>>> z = y[:] # Make z a copy of y
>>> z.append('a')
>>> x = 'X'
>>> print "x:", x
x: X
>>> print "y:", y
y: ['x']
>>> print "z:", z
z: ['x', 'a']
>>>