copy是什么意思_id copy是什么意思
深浅拷贝列表存放值的时候,是先申请一块内存空间,存放索引和内存地址的对应关系,其实通俗的来说列表内不存真正的值,是一种间接存放的对应关系;列表内
深浅拷贝
列表存放值的时候,是先申请一块内存空间,存放索引和内存地址的对应关系,其实通俗的来说列表内不存真正的值,是一种间接存放的对应关系;列表内存不可变类型的数据
就比如说,如果现在将L列表索引0位置的值修改为66,那么这个过程发生了什么?通俗理解为去L[0]去值11的路被销毁了,现在通往了值66,那么这个对应关系就修改了,再次索引出来的L[0]就是66
不管是一维的还是二维的道理都是如此;二维
浅拷贝只拷贝了一层,后续需要结合可变与不可变类型理解来决定,如果一维列表内没有可变类型,其实浅拷贝的影响并不大,如果一维列表内有可变类型的元素,那么就会造成影响l = [11,22,[xx,yy]] l列表是二维的,列表套列表的结构
# 浅拷贝 new_l = [:] # 修改原列表 l[2][0] = zz print(新列表,new_l) # 新列表 [11,22,[zz,yy]] print(源列表,l) # 原列表 [11,22,[zz,yy]]
print(id(l[0]),id(l[1]),id(l[2])) # 1627619440 1627619472 2225456877448 print(id(new_l[0]),id(new_l[
1]),id(new_l[2])) # 1627619440 1627619472 2225456877448 总结:不论修改原列表还是新列表,修改列表内的不可变类型元素不会对原列表或新列表造成影响,如果修改的是列表内的可变类型元素,那么原列表或新列表会随着修改而修改 原理:拷贝对于不可变类型来说拷贝的是值,但是拷贝对于可变类型元素来说拷贝的是对应关系,可以通过查看原列表和新列表的id值来验证,id值是一样的
总结:不论修改原列表还是新列表,修改列表内的不可变类型元素不会对原列表或新列表造成影响,如果修改的是列表内的可变类型元素,那么原列表或新列表会随着修改而修改原理:拷贝对于不可变类型来说拷贝的是值,但是拷贝对于可变类型元素来说拷贝的是对应关系,可以通过查看原列表和新列表的id值来验证,id值是一样的
修改值发生了什么变化?不可变类型:任然不变可变类型:跟着改变
深拷贝深拷贝其实就是对浅拷贝不能处理的可变类型进行处理,对应关系更深一层copy;我们潜意识理解的拷贝,拷贝出来一份你玩你的我玩我的互不影响,深copy就做到如此;导入:from copy import deepcopy
from copy import deepcopy l = [11,22,[xx,yy]] new_l = deepcopy(l) print(l,id(l)) # [11, 22, [xx, yy]] 1305767841288
print(new_l,id(new_l)) # [11, 22, [xx, yy]] 1305767841352 print(id(l[0]),id(l[1]),id(l[2])) # 1627619760 1627620112 2688776670984
print(id(new_l[0]),id(new_l[1]),id(new_l[2])) # 1627619760 1627620112 2688776669256 列表的id值不一样就代表着这两个列表是不同的列表,两个完全不一样的对象,子列表也是一样
不可变类型的id还是一样,不可变类型的id就不一样了,那么列表就相当于造了一个新的列表了
现在再修改哪个值都不会对原列表或新列表有影响,现在修改值只需修改对应关系再指向新值就可以了
本文来自https://www.cnblogs.com/48xz/p/16041389.html
- 标签:
- 编辑:慧乔
- 相关文章
-
人工智能就业方向及前景_自动化就业方向及前景
AI不能抢人类饭碗,未来就业出路走向何方?人工智能技术飞速发展,自动化正在逐步取代人类在生产制造、信息处理等领域的工作。这种技术…
-
浙江传媒学院是几本_浙江传媒学院是几本?一本、二本还是大专?
浙江传媒学院是浙江省人民政府和国家广播电视总局共建高校,是一所行业特色鲜明的高水平传媒类高校。电视艺术学院 广播电视编导 13…
- 党徽佩戴的正确位置_党徽佩戴的正确位置西装
- 宝贝英文_宝贝英文名字大全男孩
- 桃子的英文_桃子的英文单词是什么
- 洛阳外国语学院_洛阳外国语学院录取分数线
- 武汉东湖学院是正规大学吗_武汉东湖学院是正规大学吗知乎