Python 我认为与 C/C++ 最不一样的地方就是:没有变量类型。 而这个特点恰恰会带来一个很严重的问题,就是针对函数参数的传递。习惯了C/C++, 对于传参简直就是张口就来: 传值、传地址、引用。但是Python函数参数的传递和这些都不一样,因为Python的变量都是和对象进行绑定的,为此只要对象发生改变,变量的值就不会被函数改变。
def f(a):
a = a + 1
b = 2
f(b)
print(b)
### > 2 (因为运算导致新对象的创建,导致a不再和b绑定同一个对象,为此b的值不变)
def f(a):
a[0] += 1
b = [1, 2]
f(b)
print(b)
### > [2, 2] (因为与b绑定的是一个list对象,list对象是可变对象,函数并未导致a, b绑定不同的对象,为此b的值发生改变)
def f(a):
a = [1, 2]
a[0] += 1
b = [1, 2]
f(b)
print(b)
### > [1, 2] (因为a与一个新的对象进行绑定,函数导致a, b绑定不同的对象,为此b的值不发生改变)