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

2024-03-28 17:21:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个密码:

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']

Tags: 密码printappend
2条回答

当前代码将z创建为y本身的引用。也就是说,zy都指向内存中的同一个list对象。你知道吗

要解决此问题,请将z作为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']
>>>

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

如果希望y成为列表的副本,则需要显式创建这样的副本:

z = list(y)

或者

z = y[:]

相关问题 更多 >