Python中Set的深浅Copy

2021-01-12 14:30:16 浏览数 (1)

参考链接: Python中set的copy

深浅copy 

  1、赋值运算 

  对于赋值运算来说,list1与list2指向的是同一个内存地址,所以他们是完全一样的。 

list1=['Jordan','James','Paul','Jeorage','Curry']

list2=list1

list1.append('Irving')

print(list1) #['Jordan', 'James', 'Paul', 'Jeorage', 'Curry', 'Irving']

print(list2) # #['Jordan', 'James', 'Paul', 'Jeorage', 'Curry', 'Irving'] 

  2、浅拷贝copy 

  对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始,指向的都是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性。 

l1 = [1,2,3,['hello','world']]

l2 = l1.copy()

print(l1,id(l1))  # [1, 2, 3, ['hello', 'world']] 1920725366664

print(l2,id(l2))  # [1, 2, 3, ['hello', 'world']] 1920726234696

l1[1] = 222

print(l1,id(l1))  #[1, 222, 3, ['hello', 'world']] 1920725366664

print(l2,id(l2))  # [1, 2, 3, ['hello', 'world']] 1920726234696

l1[3][0] = 'everybody'

print(l1,id(l1[3]))  # [1, 222, 3, ['everybody', 'world']] 1920726234824

print(l2,id(l2[3]))  # [1, 2, 3, ['everybody', 'world']] 1920726234824 

  3、深拷贝deepcopy 

  对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变。 

import copy

l1 = [1,2,3,['hello','world']]

l2=copy.deepcopy(l1)

print(l1,id(l1))  # [1, 2, 3, ['hello', 'world']] 2200548595592

print(l2,id(l2))  # [1, 2, 3, ['hello', 'world']] 2200548596424

l1[1] = 222

print(l1,id(l1))  #[1, 222, 3, ['hello', 'world']] 2200548595592

print(l2,id(l2))  # [1, 2, 3, ['hello', 'world']] 2200548596424

l1[3][0] = 'everybody'

print(l1,id(l1[3]))  # [1, 222, 3, ['everybody', 'world']] 2200548595400

print(l2,id(l2[3]))  # [1, 2, 3, ['hello', 'world']] 2200548596360 

类似C、C 中指针中

0 人点赞