






















Python 里所有赋值,全都是「传引用」(地址引用),没有传统意义上的拷贝赋值。
区别只在:不可变对象看上去像值传递,可变对象明显是引用共享。
int、float、str、bool、tuple
list、dict、set、自定义对象
不是把列表复制一份给 b
而是:a 和 b 指向同一个内存地址的同一个对象
👉 这就是传引用
只要是可变对象赋值、传参、函数返回,都是共享引用:
lst1 = [1,2]
lst2 = lst1 # 引用传递,指向同一个列表
lst2.append(3)
print(lst1) # [1,2,3] 跟着变了!
原因:lst1、lst2 是同一个内存地址
a = 10
b = a
b = 20
print(a) # 10 没变
不是没传引用,而是:
不可变对象不能原地修改,重新赋值只是让 b 指向了新地址,原来的 a 不受影响。
def func(x):
x.append(99)
lst = [1,2]
func(lst)
print(lst) # [1,2,99] 外部被改了,就是引用传递
.copy()、切片 [:]、deepcopy此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。