讲讲python的赋值和拷贝,写代码的时候踩过不少坑。
-
首先赋值和拷贝应该区分可变对象和不可变对象
-
对于可变对象来说(如list、array、dict等),赋值相当于引用而非拷贝,以list为例,可以看到,赋值后两个变量指向同一个地址。此时,若改变其中一个变量的值,两个变量回同时改变。
l = [0, 1, 2] lc = l print id(l) # 140364430709032 print id(lc) # 140364430709032 lc[0] = 10 print l #[10, 1, 2] print lc #[10, 1, 2]
因此,对python可变对象的拷贝,需要通过copy实现,若该可变对象为list,还可通过遍历赋值的方法进行拷贝。这种拷贝方法称为浅拷贝。
lc_ = copy.copy(l) print id(l) #140364430709032 print id(lc_) #140364186128968 lc__