2024-03-28 17:21:45 发布
网友
我有这个密码:
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']
当前代码将z创建为y本身的引用。也就是说,z和y都指向内存中的同一个list对象。你知道吗
z
y
要解决此问题,请将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
本身的引用。也就是说,z
和y
都指向内存中的同一个list对象。你知道吗要解决此问题,请将
z
作为y
的副本,而不是对它的引用:下面是一个演示:
通过将
y
分配给z
,您没有创建列表的副本。您只是创建了对同一列表对象的另一个引用。你知道吗如果希望
y
成为列表的副本,则需要显式创建这样的副本:或者
相关问题 更多 >
编程相关推荐