Python既不是按引用调用也不是按值调用。这更明智!(实际上,我在学习更通用的语言之前就已经学习过Python,因此按值调用和按引用调用对我来说似乎很奇怪。)
在Python中,有 东西 ,有 名字 。列表,整数,字符串和自定义对象都是万物。x
,y
和z
是名字。写作
x = []
意思是“构造新事物[]
并为其命名x
”。写作
x = []
foo = lambda x: x.append(None)
foo(x)
意思是“[]
用name构造一个新事物,用namex
构造一个新函数(这是另一件事)foo
,然后调用foo
具有name的事物x
”。现在,foo
仅将None
其追加到收到的任何内容上,因此减少为“追加None
到空列表”。写作
x = 0
def foo(x):
x += 1
foo(x)
意思是“建设一个新事物0
与名称x
,构造一个新的功能foo
,并呼吁foo
对x
”。内部foo
,分配正义说:“重命名x
为1,再加上它曾经是什么”,但是这并不能改变事情 0。