3 回答
TA贡献1784条经验 获得超7个赞
我的理解: b 现在指的是两个对象, . . .
那是不正确的。一个名称不能同时与给定范围内的多个对象相关联。
b = a
与关联的b
对象关联。a
该行执行后,将没有任何内容被引用['a', 'b']
,并且该列表应该符合垃圾回收条件,因为它不能再被使用。
TA贡献1842条经验 获得超21个赞
不要把对象想成指针,我认为那是你困惑的根源。这不是“b 指向 a”或“a 指向 b”,它与绑定到对象有关。我认为看看id会有用
>>> a = [1, 2, 3]
>>> id(a)
1833964774216
>>> b = a
>>> id(b)
1833964774216
在这种情况下,a和b都绑定到该列表。因此,任何要列出的突变1833964774216都会反映在两个对象中。但我可以重新分配(或重新绑定)到一个完全不同的对象
>>> b = [4, 5, 6]
>>> id(b)
1833965089992
>>> b
[4, 5, 6]
这对没有任何影响,a因为它仍然绑定到原始列表
>>> a
[1, 2, 3]
>>> id(a)
1833964774216
TA贡献1963条经验 获得超6个赞
让我们了解名称和对象之间的区别。在您的例子中,a 和 b 是名称,分配给 a 和 b 的列表“[1,2,3]”是对象。最初 a = [1,2,3] 并且在 a 被分配给 b 即 b=a 之后,在这种情况下 a 和 b 都绑定到同一个列表对象。这意味着您可以使用名称 a 或 b 中的任何一个来更改该列表对象的值。
这可以通过将分配给 a 的列表复制到 b 来解决,
b = a.copy()
这将创建分配给 b 的同一对象的副本
添加回答
举报