码迷,mamicode.com
首页 > 编程语言 > 详细

python 深浅拷贝

时间:2019-01-02 19:04:23      阅读:221      评论:0      收藏:0      [点我收藏+]

标签:div   模块   内存地址   lex   也会   延伸   end   地址   bsp   

深浅拷贝
(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 深浅拷贝

标签:div   模块   内存地址   lex   也会   延伸   end   地址   bsp   

原文地址:https://www.cnblogs.com/avit/p/10209338.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!