请解释 Python 的 "pass-by-pointer" 方法

Please explain Python's "pass-by-pointer" approach

a = 5

a 本身并没有保存值 5,而只是对象 5 的地址,对吗?所以它是一个参考变量。

b = a 

现在在我看来,b,而不是再次持有 a 的地址,实际上持有 a 的 "value",这是对象 5 的地址.这不就是Python传值的结果吗?

但是我应该如何理解这种明显的差异?

谢谢!

没有差异。

将作业 a=5 视为将标记标签 'a' 放在 5 左右。

现在,如果您设置 b=a,python 会查看标记为 a (5) 的内容并为其附加一个新标签 b

赋值运算符从不引用变量的名称。他们总是追逐引用然后引用 chased-down value.

事实上,它并不完全像我描述的那样工作,因为对于像 int 这样的简单数据类型,内存中不仅仅是 5 的一个副本。但是您可以表现就好像它是那样工作的,并且永远不会感到惊讶。

使用列表而不是简单的整数更容易理解:

a = [1, 2, 3]
b = a

只有一个列表存在,ab 现在都引用它,这解释了以下内容。

>>> b[0] = 5
>>> a
[5, 2, 3]