day07-深浅拷贝-回顾

一.列表以等号赋值给新的列表
这种直接用等号 将新列表绑定在原列表的内存地址上,两者只是变量名不一样,指向的是同一内存地址,二者实则是一体,
一个列表变动,另外一个也会作同样的变化。
使用方法:
# list1=[
# 'egon',
# 'lxx',
# [1,2]
# ]
list2=list1

——————>假设有我们有以下需求:
1.将一个列表拷贝以下产生一个新的列表
2.而且两个列表在该操作的时候也能独立,也就是说改其中一个列表的元素另一个不会有任何的变化。
二.浅copy
用列表的内置的copy的方法拷贝一个新的列表
使用方法:
copy:
list1=[
'tom',
'jack',
[1,2]
]
list3=list.copy
浅copy:新列表list3申请的是一个新的内存空间,但是存放的值的内存地址和原列表相同,原列表第一层的的内存地址不分
可变不可变直接copy给新列表,。

使用方法:
list1=[
'tom',
'jack',
[1,2]
]

list3=list1.copy()
特点1:对应原列表中,如果遇到不可变的赋值,是产生新的值时,而不是在原来的内存上进行修改,
这时会申请新的内存来存放新的值,而新列表中的值对应的原列表改变之前的内存地址,
所有不会受到影响
特点2:遇到可变类型的赋值时,虽然改变了可变类型里包含的值但是内存地址没有发生改变,也就是说酒换瓶不换,
而新的列表元素指向的内存又是原列表的内存即和原列表共用一个酒瓶,所以也会跟着改变,这就满足不了刚刚
需求,也就是说两个列表达到没有改的独立。



三.深copy:调用深copy方法时需要用import调出copy模块才能使用。
使用方法:
list1=[
'tom',
'jack',
[1,2]
]
import copy
list3=copy.deepcopy(list)
特点:针对浅copy可变类型赋值内存地址不变的不能满足改独立的缺点,在遇到可变类型的copy时会申请新的内存空间存放可变的值,
但是新内存里存放值和原列表相等,也就是说瓶换而就酒不换。这样原列表中可变类型值发生改变时就不会影响到新的额列表,
对于不可变类型深copy的处理方法和浅copy一样,因为不可能类型赋值会产生新的内存空间,对新列表没有影响,这样可变和不可变
类型的赋值都不会影响到新的列表,实现的两个列表的完全独立。

猜你喜欢

转载自www.cnblogs.com/zhangtieshan/p/12452397.html