day _07之深浅拷贝知识

浅拷贝,

深拷贝,

 


#需求:
# list1=[
# 'geon',
# 'lxx',
# [1,2]
# ]

#二者分割不开,一个改另一个也会改,因为指向的上是同一个东西
# list2=list1 #这不叫拷贝
# list1[0]='EGON'
# print(list2) #随之改变


#需求:
#1、拷贝原列表,产生新列表
#2、想让两个列表完全独立开,针对的是改操作的独立,而不是读操作


#满足需求一:如何拷贝列表
#1、浅拷贝:吧原列表第一层的内存地址不加区分,完全拷贝一份
#2、深拷贝:
list1=[
'geon',
'lxx',
[1,2]
]
list3=list1.copy()
# print(list3)
# print(id(list1))
# print(id(list3))
#
# print(id(list1[0]),id(list1[1]))
# print(id(list3[0]),id(list3[1]))

#实验一:对于不可变类型的赋值,都是长生了新值,让列表的索引值改变
#内存地址并不会影响新列表

# list1[0]='EGON'
# list1[1]='LXX'
# # list1[2]=123

#实验2:对于可变类型,我们可以改变可变类型中包含的值,但内存地址不变
#即原列表的索引值仍指向原来的内存地址,于是新列表也跟着一起受影响
list1[2][0]=111
list1[2][1]=222

print(list3)
print(list1)


#要想copy得到新的列表于原列表的改操作完全独立开来,
#必须要有一种可以区分开可变类型于不可变类型的copy机制,这就是深copy

#2、深拷贝

import copy
list1=[
'geon',
'lxx',
[1,2]
]

list3=copy.deepcopy(list1)
# print(id(list1))
# print(id(list3))

# 不可变 不可变 可变
# print(id(list1[0]),id(list1[1]),id(list1[2]))
# print(id(list3[0]),id(list3[1]),id(list3[2]))
# 结果
# 1910535881008 1910535880944 1910536242560
# 1910535881008 1910535880944 1910536383936

# print(list3)
# print(id(list1[2][0]),id(list1[2][1]))
# print(id(list3[2][0]),id(list3[2][1]))

list1[0]='EGon'
list1[1]='LXX'
list1[2][0]=111
list1[2][1]=222
print(list1)
print(list3)
posted @ 2020-12-19 11:56  欢乐二次方  阅读(86)  评论(0)    收藏  举报