python 深浅拷贝
Posted avit
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 深浅拷贝相关的知识,希望对你有一定的参考价值。
深浅拷贝
(1)赋值运算
l1 = [1,2,3,[‘barry‘,‘alex‘]] l2 = l1 l1[0] = 111 print(l1) # [111, 2, 3, [‘barry‘, ‘alex‘]] print(l2) # [111, 2, 3, [‘barry‘, ‘alex‘]] l1[3][0] = ‘wusir‘ print(l1) # [111, 2, 3, [‘wusir‘, ‘alex‘]] print(l2) # [111, 2, 3, [‘wusir‘, ‘alex‘]]
(2)浅拷贝
lst1 = ["太白","日天","哪吒","银角大王","金角大王"] lst2 = lst1 lst1.append("女神") print(lst1,id(lst1)) print(lst2,id(lst2)) #指向同一个内存地址,所以二者相同 lst1 = ["太白","日天","哪吒","银角大王","金角大王"] lst2 = lst1.copy() # 会创建新对象, 创建对象的速度会很快. lst2 = lst1[:] 创建了新列表 lst1.append("女神") print(lst1,id(lst1)) #[‘太白‘, ‘日天‘, ‘哪吒‘, ‘银角大王‘, ‘金角大王‘, ‘女神‘] 2606709613704 print(lst2,id(lst2)) #[‘太白‘, ‘日天‘, ‘哪吒‘, ‘银角大王‘, ‘金角大王‘] 2606709613832 lst1 = ["太白","日天",["盖浇饭", "锅包肉", "吱吱冒油的猪蹄子"],"哪吒","银角大王","金角大王"] lst2 = lst1.copy() # 会创建新对象, 创建对象的速度会很快. lst1[2].append("油泼扯面") print(lst1,id(lst1[2])) #[‘太白‘, ‘日天‘, [‘盖浇饭‘, ‘锅包肉‘, ‘吱吱冒油的猪蹄子‘, ‘油泼扯面‘], ‘哪吒‘, ‘银角大王‘, ‘金角大王‘] 1440371189000 print(lst2, id(lst2[2])) #[‘太白‘, ‘日天‘, [‘盖浇饭‘, ‘锅包肉‘, ‘吱吱冒油的猪蹄子‘, ‘油泼扯面‘], ‘哪吒‘, ‘银角大王‘, ‘金角大王‘] 1440371189000
(3)深拷贝
# 导入拷贝模块 import copy lst1 = ["太白","日天",["盖浇饭", "锅包肉", "吱吱冒油的猪蹄子"],"哪吒","银角大王","金角大王"] lst2 = copy.deepcopy(lst1) print(lst1,id(lst1[2])) #[‘太白‘, ‘日天‘, [‘盖浇饭‘, ‘锅包肉‘, ‘吱吱冒油的猪蹄子‘], ‘哪吒‘, ‘银角大王‘, ‘金角大王‘] 1764073894856 print(lst2,id(lst2[2])) #[‘太白‘, ‘日天‘, [‘盖浇饭‘, ‘锅包肉‘, ‘吱吱冒油的猪蹄子‘], ‘哪吒‘, ‘银角大王‘, ‘金角大王‘] 1764073896264
小结:
赋值没有创建新对象。多个变量共享同一个对象
浅拷贝:会创建新对象。 新的对象中里面的内容不会被拷贝
深拷贝。 创建一个一模一样的完全新的对象。 这个对象延伸出来的内容也会跟着复制一份
以上是关于python 深浅拷贝的主要内容,如果未能解决你的问题,请参考以下文章