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 深浅拷贝的主要内容,如果未能解决你的问题,请参考以下文章

我要学python之深浅拷贝原理

Python 的深浅拷贝 终于明白了

python深浅拷贝

python 深浅拷贝,集合 ,小数据池 操作

Python高级语法-深浅拷贝-总结(4.2.1)

Python深浅拷贝