|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
看不懂这个代码的运行结果
例一:
old = [3, 2, 8, 4, 5]
new = old
old = [6]
print(new)
会打印:[3, 2, 8, 4, 5]
例二:
old = [3, 2, 8, 4, 5]
new = old
old = old.sort()
print(new)
会打印[2, 3, 4, 5, 8]
从这个结果可以看出 例一 是深度复制,例二是浅度复制 。可是看过程我没法看出区别,为什么结果会变化呢,例一是把old直接赋值为列表[6],例二是给里列表内容进行排序然后把结果赋值给old,同样是赋值为什么运行结果会不同呢,看了小甲鱼老师的图讲还是不懂。
善用论坛的搜索功能哈~
【已解决】old new 列表 id 问题
https://fishc.com.cn/thread-185134-1-1.html
另外,我们看看下面的例子,能不能理解:
这里我们用Python内置函数 id() 来查看他们的内存地址是否相同,相同说明是同一个数据import copy
l = [[1,2,3],1,2,3]
x = copy.copy(l) # 浅拷贝:这里相当于列表切片[:]
z = copy.deepcopy(l) # 深拷贝
print(' 原列表id地址:',id(l),'\n浅拷贝列表id地址:',id(x),'\n深拷贝列表id地址:',id(z))
运行结果: 原列表内元素id地址: 1708146868416
浅拷贝列表内元素id地址: 1708149001152
深拷贝列表内元素id地址: 1708149000448
三个列表的 id 全部不相同,说明浅拷贝是直接创建了新的列表,那列表内的元素呢?我们接下来看看下面的运行情况:
import copy
l = [[1,2,3],1,2,3]
x = copy.copy(l) # 浅拷贝:这里相当于列表切片[:]
z = copy.deepcopy(l) # 深拷贝
print(' 原列表内元素id地址:',id(l[0]),'\n浅拷贝列表内元素id地址:',id(x[0]),'\n深拷贝列表内元素id地址:',id(z[0]))
运行结果: 原列表内元素id地址: 2351807077120
浅拷贝列表内元素id地址: 2351807077120
深拷贝列表内元素id地址: 2351808203584
会发现浅拷贝的元素id和原来列表id相同,所以浅拷贝没有列表内的元素进行拷贝
而深拷贝的元素id与原先列表不同,所以深拷将列表内的元素彻彻底底的进行拷贝了
简单的说,深拷贝就是完完全全的复制一遍,然后直接创建了全新的列表
而浅拷贝只复制了列表的外壳,而内部元素还是没有拷贝成新的~
要注意的是:这些拷贝对所有可变类容器的来说都有这种性质,比如:列表、元组、字典、集合
|
|