【问题标题】:Memory allocation in pythonpython中的内存分配
【发布时间】:2016-09-13 11:01:30
【问题描述】:

我创建了一个包含三个名为 l 的元素的列表,然后我将列表的所有内容复制到列表 y 中。但是当我在内存中打印它们的地址时,我不明白为什么这不是同一个地址。为什么 y 不是 l 的引用,如果我想要 y 将是 l 的引用,以便它们具有相同的地址。我该怎么做?

这是我的代码

l = [8,12,3]
y = l[:]

print l
print y

print id(l)
print id(y)

在屏幕上显示:

[8, 12, 3]
[8, 12, 3]
40894592 
40837072

【问题讨论】:

  • 如果您想要两个引用同一个列表,为什么要明确创建一个副本?

标签: python memory


【解决方案1】:

[:]l 的内容复制到一个新列表y,因此它们需要位于不同的地址。要使y 成为l 的引用,只需编写

y = l

【讨论】:

    【解决方案2】:

    因为列表的一部分会创建一个新列表。 id 返回每个列表的地址。

    【讨论】:

      【解决方案3】:

      一个好点是,如果你写这个语句

      l = [8,12,3],
      

      Python 创建一个从对象l 指向列表[8, 12, 3] 的指针。

      如果你做出这样的声明

      y = l,
      

      那么对象y指向l,如果你改变ly也会改变。

      万一你写

      y = list(l),
      

      对象y 指向一个新列表。那么如果你修改ly中的值保持不变。

      【讨论】:

        猜你喜欢
        • 2019-04-28
        • 2015-11-17
        • 1970-01-01
        • 2013-06-01
        • 2015-08-10
        • 2012-12-16
        • 2011-12-21
        • 2018-04-02
        • 1970-01-01
        相关资源
        最近更新 更多