Are Python's bools passed by value?
我发送了一个对bool对象的引用,并在一个方法中对其进行了修改。方法执行完毕后,方法外部的bool值不变。
这让我相信python的bools是按值传递的。是真的吗?其他的python类型的行为方式是什么?
Python变量不是C++意义上的"引用"。相反,它们只是绑定到内存中任意位置的对象的本地名称。如果该对象本身是可变的,则对其所做的更改将在已将名称绑定到该对象的其他作用域中可见。然而,许多原始类型(包括
事实上,几乎任何时候*你看到
*-在python中唯一的例外是属性的setter方法,它允许您编写
要记住的是,在Python中,函数或方法无法在调用命名空间中重新绑定名称。当你写"我发送了一个对bool对象的引用,并在一个方法中修改了它"时,你实际做的(我猜)是在方法体中重新绑定参数名(bool值被调用绑定到该参数名)。
它取决于对象是可变的还是不可变的。不可变对象的行为就像您在bool中看到的那样,而可变对象则会发生变化。
参考:http://www.testingreflections.com/node/view/5126
Python passes references-to-objects by value (like Java), and everything in Python is an object. This sounds simple, but then you will notice that some data types seem to exhibit pass-by-value characteristics, while others seem to act like pass-by-reference... what's the deal?
It is important to understand mutable and immutable objects. Some objects, like strings, tuples, and numbers, are immutable. Altering them inside a function/method will create a new instance and the original instance outside the function/method is not changed. Other objects, like lists and dictionaries are mutable, which means you can change the object in-place. Therefore, altering an object inside a function/method will also change the original object outside.
简而言之,python中没有变量;有对象(如true和false,bools恰好是不可变的)和名称。名称是您所调用的变量,但名称属于一个作用域,通常不能更改本地名称以外的名称。