1、深拷贝 --> 克隆一份,修改拷贝后的内容不对原对象内容产生影响
- 拷贝后修改序列中元素内容,注意:被修改的元素不能为一个序列中的某个值
a = [["北京多测师","成都多测师"],"上海多测师","深圳多测师","广州多测师"] b = a.copy() b[1] = "天津多测师" print(a) print(b) # 结果如下 [['北京多测师', '成都多测师'], '上海多测师', '深圳多测师', '广州多测师'] # 列表 a 中的 "上海多测师" 未修改为 "天津多测师" [['北京多测师', '成都多测师'], '天津多测师', '深圳多测师', '广州多测师'] # 列表 b 中的 "上海多测师" 修改为 "天津多测师"
- copy 模块中的 deepcopy()
import copy a = [["北京多测师","成都多测师"],"上海多测师","深圳多测师","广州多测师"] b = copy.deepcopy(a) b[0][0] = "天津多测师" print(a) print(b) # 结果如下 [['北京多测师', '成都多测师'], '上海多测师', '深圳多测师', '广州多测师'] # 原列表 a 未发生改变 [['天津多测师', '成都多测师'], '上海多测师', '深圳多测师', '广州多测师'] # 列表 b 中的第一个元素中的 "北京多测师" 修改为 "天津多测师"
2、浅拷贝 --> 修改拷贝后的内容原对象内容随之修改
a = [["北京多测师","成都多测师"],"上海多测师","深圳多测师","广州多测师"] b = a.copy() b[0][0] = "天津多测师" print(a) print(b) # 结果如下 [['天津多测师', '成都多测师'], '上海多测师', '深圳多测师', '广州多测师'] [['天津多测师', '成都多测师'], '上海多测师', '深圳多测师', '广州多测师'] # 列表 a 和 b 中的 "北京多测师" 都修改为 "天津多测师"
- copy 模块中的 copy()
import copy a = [["北京多测师","成都多测师"],"上海多测师","深圳多测师","广州多测师"] b = copy.copy(a) b[0][0] = "天津多测师" print(a) print(b) # 结果如下 [['天津多测师', '成都多测师'], '上海多测师', '深圳多测师', '广州多测师'] [['天津多测师', '成都多测师'], '上海多测师', '深圳多测师', '广州多测师'] # 列表 a 和 b 中的 "北京多测师" 都修改为 "天津多测师"
3、实例讲解
# 现有老公张三有额度为 200000 元的信用卡,卡号为:20200520,已使用的额度:15000 # 现需要实现张三的老婆 Andy 也需要绑定这张信用卡进行付款 zs_card = ["张三",20200520,[200000,15000]] # 张三名下的信用卡 ad_card = zs_card.copy() # 妻子 Andy 账户也开了一张绑定张三信用卡的信用卡,且修改姓名和卡号 ad_card[0] = "Andy" ad_card[1] = 20200521 print(ad_card) # 打印出 Andy 的信用卡信息 ['Andy', 20200521, [200000, 15000]] zs_card[2][1] += 2000 # 此时张三使用了信用卡且刷了 2000 元 print(ad_card) # 此时 Andy 的信用卡额度也随之变化 # 运行结果如下 ['Andy', 20200521, [200000, 15000]] ['Andy', 20200521, [200000, 17000]] # 张三刷卡后,Andy 所持的信用卡已使用的额度随之增长