【问题标题】:Python Variable Assignment [duplicate]Python变量赋值[重复]
【发布时间】:2013-09-13 16:22:51
【问题描述】:

有人能解释一下为什么在 Python 中会发生这种情况吗?

>>> a = [1, 2, 3]
>>> b = a
>>> b[0] = 2
>>> print a
[2, 2, 3]
>>> a[0] = 4
>>> print b
[4, 2, 3]
>>> b = [111]
>>> print a
[4, 2, 3]

基本上,为什么我可以重新分配 a 或 b 中的元素并更改另一个,但如果我完全修改列表却不能更改另一个?谢谢!

【问题讨论】:

  • 你能说出你运行的是哪个版本的python吗?
  • 试试b[:] = [1,1,1,1]

标签: python list variables variable-assignment


【解决方案1】:

那是因为当您执行b = [111] 时,您正在为 b 分配一个全新的列表对象。因此 b 现在包含对新列表的引用,而不是对旧列表的引用。

【讨论】:

    【解决方案2】:

    当您将 b 分配给 a 时,两个对象现在都指向同一个内存位置。因此,对任何一个对象所做的任何更改都会反映在另一个对象中。当您为“b”分配一个新值时,对象的内存地址会变得不同。详细说明:

    >>> a=[1,2,3]
    >>> b=a
    >>> id(a)
    4520124856
    >>> id(b)
    4520124856
    >>> b=[111]
    >>> id(a)
    4520124856
    >>> id(b)
    4520173936 
    >>> 
    

    id() 用于获取对象的内存地址。

    如果您想创建“a”的精确副本,但没有相同的内存位置,请使用 b=a[:],它只会创建数据的副本。

    【讨论】:

    • 有道理,谢谢!
    【解决方案3】:

    当我们定义变量 b = a python 时,将这个值保存在内存位置 x 中。 点 a 和 b 都是 x 内存位置。 所以我们b值的变化a的值也变了。 我们为 b 分配新值,使其存储在另一个内存位置,并且 b 指向新的内存位置。 所以 a 的价值保持不变。

    【讨论】:

      猜你喜欢
      • 2017-12-18
      • 2014-05-06
      • 1970-01-01
      • 2015-03-21
      • 1970-01-01
      • 2013-03-31
      • 2017-07-01
      • 2011-10-11
      • 2016-02-03
      相关资源
      最近更新 更多