python - 通过分配 : Python

标签 python pass-by-reference variable-assignment

我想理解以下代码变体:

a = [1, 2, 3]
b = a
b.append(4)
b = ['a', 'b']
print(a, b)

我的理解是,变量 a 指的是一个对象,该对象在内存中的某个位置包含列表 [1,2,3],而 b 现在指的是 a 所指的同一个对象,并且通过该链接我们在技术上附加了一个 not b。

输出:[1, 2, 3, 4] ['a', 'b']

我稍微更新了代码:

a = [1, 2, 3]
b = ['a', 'b']
b = a
b.append(4)
print(a, b)

我的理解:b 现在指的是两个对象,第一个列表 ['a','b'] 和第二个列表(a 最初指的是to) [1,2,3] 通过第三行 b = a.

输出:[1, 2, 3, 4] [1, 2, 3, 4]

最后的代码变体:

a = [1, 2, 3]
b = ['a', 'b']
b = a
b.append(4)
a.append(10)
print(a, b)

根据我目前的理解,我认为第 3 行 b = a 上的链接只给了 b 引用多个对象的能力(它自己和 a's) 和 a 应该只引用一个对象 [1,2,3],所以预期的输出应该是:[1,2,3,4,10] [1,2,3,4]

实际输出:[1, 2, 3, 4, 10] [1, 2, 3, 4, 10]

那么第 3 行的赋值 b = a 是否像一个双向链接? a 还创建了对 b 对象的引用吗?

我希望有人能为我解决这个困惑,如果我错了,请纠正我的想法。 谢谢。

最佳答案

My understanding: b is now referring to two objects, . . .

这是不正确的。一个名称不能同时与给定范围内的多个对象相关联。

b = aba 关联的对象相关联。该行执行后,将不会引用任何内容 ['a', 'b'],并且该列表应该符合垃圾回收条件,因为它不能再使用。

关于python - 通过分配 : Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63417488/

相关文章:

python - shell退出时必须捕获什么样的信号

Python错误: FileNotFoundError: [Errno 2] No such file or directory(read_csv with open)

Java - 访问数组的有效方法

php - PHP 中的并行数组赋值

python - 查找列表中的最大元素

c++ - 默认复制构造函数和默认赋值运算符

python - 如何离线安装包?

python - 在 map 上绘制分布(直方图)

vba - ByRef 不能在 VBA 中使用类中的值类型

Swift 等效于 C++ 指针/引用约定?