首先,python 在函数传递参数时,都是传递引用(因为无论传入整数 int 还是列表 list,本质都是类对象)。
那么 int 作为不可变对象我还可以理解,比如下面的行为很正常:
b1 = 3
print(id(b1)) #4321884528
b1 += 4
print(id(b1)) #4321884656,id 变了,正常。
b1 = b1 + 4
print(id(b1)) #4321884784,id 变了,也正常。
但是,换成可变对象 list,就有点诡异了:
a1 = [1, 2, 3]
print(id(a1)) #4358212608
a1 += ['aa', 'bb']
print(id(a1)) #4358212608,id 没变,正常
a1 = a1 + ['aa', 'bb']
print(id(a1)) #4357527936,id 怎么就变了呢,这有点变得莫名其妙了?
按正常理解,x += y,应该等同于 x = x + y,这么一搞,这个特性就有点匪夷所思了。
那么 int 作为不可变对象我还可以理解,比如下面的行为很正常:
b1 = 3
print(id(b1)) #4321884528
b1 += 4
print(id(b1)) #4321884656,id 变了,正常。
b1 = b1 + 4
print(id(b1)) #4321884784,id 变了,也正常。
但是,换成可变对象 list,就有点诡异了:
a1 = [1, 2, 3]
print(id(a1)) #4358212608
a1 += ['aa', 'bb']
print(id(a1)) #4358212608,id 没变,正常
a1 = a1 + ['aa', 'bb']
print(id(a1)) #4357527936,id 怎么就变了呢,这有点变得莫名其妙了?
按正常理解,x += y,应该等同于 x = x + y,这么一搞,这个特性就有点匪夷所思了。
