前些天用了下listA=listB的操作,发现对listB做改动,listA也会相应变化,这才知道原来list的复制也有好几种方法啊,用“=”这种就是赋值,它只是引用了原来的对象B,因此对B操作A会同样变化,对A操作B也会变化
而要复制出一个不受原list影响的list呢,就要用到拷贝
拷贝又分深拷贝和浅拷贝,具体参考这篇文章
简单讲浅拷贝就是只拷贝了最外面一层list,而list里面的每一个元素还是指向原来list中的元素
因此如果对list中的某个元素做改动的话,另一个list的相应元素也会受到影响
浅拷贝的方法有
b = a[:]
b = [each for each in a]
b = list(a)
b = copy.copy(a)
而深拷贝就可以拷贝出一个全新的list,和原来的list不再有关联,深拷贝的方法为:
from copy import deepcopy
b = copy.deepcopy(a)
除了list之外,panda中的dataframe对象的复制也同样有这三种情况
(一)用“=”赋值,新对象引用旧对象,两者同时变化
import pandas as pd
dfA= pd.DataFrame({ ‘a’:[0,0,0], ‘b’: [1,1,1]})
dfB = dfA
(二)浅拷贝
dfB= dfA.copy()
(三)深拷贝
from copy import deepcopy
dfB = deepcopy(dfA)