python深拷贝对字典无用,因为字典键值存储的内存空间地址会跟着被赋值给拷贝对象。
比如两层字典,即使深度拷贝。原数据值依然会改变。
import copy
origin = pd.DataFrame([{'id':{'id':1}}])
c = copy.deepcopy(origin[0:1])
c = c.to_dict(orient='records')
for i in c:
i['id']['id']= 2
origin
如果要深度拷贝多层字典,建议多次深拷贝/浅拷贝。
比如如下为深度为两层的字典,拷贝两次,使得修改其值不会影响原数据:
import copy
origin = pd.DataFrame([{'id':{'id':1}}])
c = copy.deepcopy(origin[0:1])
c['id'] = c.apply(lambda x : copy.deepcopy(x['id']),axis=1)
c = c.to_dict(orient='records')
for i in c:
# for q in i['id']['id']:
i['id']['id']= 2
origin
总而言之拷贝中最好多少层就拷贝多少次。欢迎有更简洁有效的方法的大佬提点。