【问题标题】:Assigning values in python, results not as expected [duplicate]在python中赋值,结果不符合预期[重复]
【发布时间】:2013-12-13 18:47:51
【问题描述】:

我有这个代码:

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

【问题讨论】:

  • 对这类问题的回答应该被禁止,以允许关闭和标记为“重复”,而不是在被回答数百次后一次又一次地回答。这样的问题会在1000年后stackoverflow的生命终结之前得到解答吗?我也很震惊有这么多人支持答案,尤其是对声誉得分最高的成员。

标签: python variables reference


【解决方案1】:

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

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

z = list(y)

z = y[:]

【讨论】:

    【解决方案2】:

    您当前的代码创建z 以作为y 本身的引用。也就是说,zy 都指向内存中的同一个列表对象。

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

    【讨论】:

      猜你喜欢
      • 2017-09-07
      • 1970-01-01
      • 2019-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多