码迷,mamicode.com
首页 > 其他好文 > 详细

复制运算与深浅拷贝

时间:2019-04-30 12:32:10      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:赋值   一致性   nbsp   独立   import   append   epc   内存   print   

1、复制运算

l1 = [1,2,3,[a,b]]
l2 = l1
l1[0] = 111
print(l1)  # [111, 2, 3, [‘a‘, ‘b‘]]
print(l2)  # [111, 2, 3, [‘a‘, ‘b‘]]

l1[3][0] = hello
print(l1)  # [111, 2, 3, [‘hello‘, ‘b‘]]
print(l2)  # [111, 2, 3, [‘hello‘, ‘b‘]]
#所以,对于赋值运算来说,l1与l2指向的是同一个内存地址,所以他们是完全一样的

2、拷贝  copy

l1 = [1,2,3]
l2 = l1.copy() # copy,在内存中产生了新的地址
print(l1,l2)   # [1, 2, 3] [1, 2, 3]
print(id(l1),id(l2))   # 2137678556040 2137678553608
l2.append(a)
print(l1,l2)   # [1, 2, 3] [1, 2, 3, ‘a‘]

l3 = [1,2,[4,5,6],3]
l4 = l3.copy()
print(l3,id(l3))  # [1, 2, [4, 5, 6], 3] 2535910547976
print(l4,id(l4))  # [1, 2, [4, 5, 6], 3] 2535910565192
l3.append(a)
print(l3,l4)  # [1, 2, [4, 5, 6], 3, ‘a‘]   [1, 2, [4, 5, 6], 3]
l3[2].append(a)
print(l3,l4)  # [1, 2, [4, 5, 6, ‘a‘], 3]   [1, 2, [4, 5, 6, ‘a‘], 3]
print(id(l3[2]),id(l4[2]))  # 2535910550408 2535910550408
# 对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始,
# 指向的都是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性。

3、深拷贝  deepcopy

import  copy
l1 = [1,2,[4,5,6],3]
l2 = copy.deepcopy(l1)
print(l1,id(l1))  # [1, 2, [4, 5, 6], 3] 2773191650376
print(l2,id(l2))  # [1, 2, [4, 5, 6], 3] 2773191650888
l1[2].append(a)
print(l1,l2)  # [1, 2, [4, 5, 6, ‘a‘], 3]   [1, 2, [4, 5, 6], 3]
# 对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变。

 

复制运算与深浅拷贝

标签:赋值   一致性   nbsp   独立   import   append   epc   内存   print   

原文地址:https://www.cnblogs.com/aj-AJ/p/10795232.html

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