1.赋值与拷贝
直接赋值(b=a)是传引用,b改动a也会改动.
a = [1, 2, 3, 4]b = ab[1] = 999print(a, b)#[1, 999, 3, 4] [1, 999, 3, 4]
b=a.copy()或者b=a[:]是传值,b改动不影响a.
a = [1, 2, 3, 4]b = a.copy()b[1] = 999print(a, b)#[1, 2, 3, 4] [1, 999, 3, 4]
a = [1, 2, 3, 4]b = a[:]b[1] = 999print(a, b)#[1, 2, 3, 4] [1, 999, 3, 4]
2.浅拷贝与深拷贝
b=a.copy()和b=a[:]都是浅拷贝,也就是只有第一层是拷贝(传值),更深的层还是传引用.
copy模块的deepcopy函数可以实现深拷贝(每一层都是传值).
import copya = [1, 2, 3, [1, 2, 3]]c = copy.deepcopy(a)c[3][1] = 999print(a, c)#[1, 2, 3, [1, 2, 3]] [1, 2, 3, [1, 999, 3]]b = a[:]b[3][1] = 999print(a, b)#[1, 2, 3, [1, 999, 3]] [1, 2, 3, [1, 999, 3]]