我有这段代码:
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']
答案 0 :(得分:6)
通过将y
分配给z
,您没有创建列表的副本。您只是创建了对同一列表对象的另一个引用。
如果您希望y
成为列表的副本,则需要明确创建此类副本:
z = list(y)
或
z = y[:]
答案 1 :(得分:1)
您当前的代码会将z
创建为引用至y
本身。意思是,z
和y
都指向内存中的相同列表对象。
要解决此问题,请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']
>>>