【Python】copy



2018年08月06日    Author:Guofei

文章归类: 0xb0_Python语法    文章编号: 1205

版权声明:本文作者是郭飞。转载随意,但需要标明原文链接,并通知本人
原文链接:https://www.guofei.site/2018/08/06/copy.html


主要是 copy.copycopy.deepcopy 的区别

copy

import copy
a=['a','b','c','d']
a_copy=copy.copy(a)
a[0]='e'

print(a,a_copy)

[‘e’, ‘b’, ‘c’, ‘d’] [‘a’, ‘b’, ‘c’, ‘d’]
a变化后,a_copy 并不跟着变化

那如果list里面包含了子列表呢

import copy
a=['a','b',['c1','c2'],'d']
a_copy=copy.copy(a)
a[2][1]='c3'

print(a,a_copy)

[‘a’, ‘b’, [‘c1’, ‘c3’], ‘d’] [‘a’, ‘b’, [‘c1’, ‘c3’], ‘d’]
为什么结果跟着变了呢,因为copy为浅copy,只复制了第一层数据,列表里存储的子列表,打印出来是子列表,其实,在内存里,列表里只是存储了子列表的内存地址,子列表在内存里是单独存储的

浅拷贝的应用举例

# 比如两口子,共有一个账号存款
import copy

card = ['name', ['saving', 100]]  # 作为一个模板
husband = copy.copy(card)
wife = copy.copy(card)
husband[0] = 'zhangsan'
wife[0] = 'fengjie'
husband[1][1] -= 20  # 丈夫取出20,还剩下80
print(husband, wife) # 两个人的账号存款同时变动

deepcopy

deepcopy可以递归地把所有数据拷贝一边。
如果数据很大,完全复制就是存储两份数据,占用内存,慎用!

import copy
a=['a','b',['c1','c2'],'d']
a_copy=copy.deepcopy(a)
a[2][1]='c3'

print(a,a_copy)

参考文献

https://docs.python.org/3/


您的支持将鼓励我继续创作!