我发送了对 bool 对象的引用,并在方法中修改了它。方法执行完毕后,方法外的bool值没有变化。
这让我相信 Python 的 bool 是按值传递的。真的吗?还有哪些其他 Python 类型有这样的行为?
Python 变量不是 C++ 意义上的“引用”。相反,它们只是绑定到内存中某个任意位置的对象的本地名称。如果该对象本身是可变的,则对其进行的更改将在已将名称绑定到该对象的其他作用域中可见。许多原始类型(包括bool
, int
, str
, and tuple
) are 不可变的然而。您无法就地更改它们的值;相反,您可以为本地范围内的同名分配一个新值。
事实上,几乎任何时候*您都会看到以下形式的代码foo = X
,这意味着名称foo
正在被分配一个新值(X
)在当前的本地命名空间中,而不是由以下名称命名的内存中的位置foo
正在更新其内部指针以引用X
.
*- Python 中唯一的例外是属性的 setter 方法,这可能允许您编写obj.foo = X
并在后台重写它以调用类似的方法obj.setFoo(X)
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)