参数的传递-可变对象-不可变对象
python中参数的传递都是"引用传递":
1.对“可变对象”进行“写操作”,直接作用于源对象本身
2.对“不可变对象”进行“写操作”,会产生一个新的“对象空间”,并用新的值填充这块空间。(起到其它语言的“值传递”效果,但不是“值传递”。
可变对象:字典、列表、集合、自定义对象等
不可变对象:数字、字符串、元组、function等
测试参数的传递:
1.传递可变对象
a = [10,20]
print(id(a)) #输出:2589181890952
print(a) #输出:[10, 20]
print("*********************************")
def tast01(m):
print(id(m)) #输出:2589181890952
m.append(300)
print(id(m)) #输出:2589181890952
tast01(a)
print(a) #输出:[10, 20, 300]
1.传递不可变对象
传递参数是不可变对象(例如:int、float、字符串、元组、布尔值),实际传递的还是对象的作用。在“赋值操作”时,由于不可变对象无法修改,系统会新创建一个对象。
a = 100
def f1(n):
print("n:", id(n)) #输出:n: 140709868121584
#传递进来的是a对象的地址
n = n + 200
#由于a是不可变对象,因此创建新的对象n
print("n:", id(n)) #输出:n: 2203606353456
#n已经变成了新的对象
print(n) #输出:300
f1(a)
print("a:", id(a)) #输出:a: 140709868121584
#显然,通过id值我们可以看到n和a一开始是同一个对象。给n赋值后,n是新的对象