底层剖析Python深浅拷贝
拷贝就是 值得一提的是绝大部分编程语言中对于 在Python中,除开手动 Python = 赋值示例好了,废话不多说。直接进入主题,上代码: >>> # ==== = 赋值示例 ==== >>> >>> li1 = ["a",b 注意存储的数据类型。第一层存储2个不可变类型,1个可变类型小容器(list),第二层存储2个不可变类型 >>> id(li1) 第一层,查看变量名所指向的列表(第一层容器)的内存地址id号 2324901133120 >>> id(li1[0]) 第一层,查看第一层容器中的具体元素内存地址id号 2324900663472 >>> id(li1[-1]) 第二层(小容器id号),查看第一层容器中的小容器list的内存地址id号 2324900812864 >>> li1 ['',2]] >>> =============手动分割线============= >>> li2 = li1 >>> id(li2) 第一层,查看第一层容器中的具体元素内存地址id号 2324900663472 >>> id(li2[-1]) 第二层(小容器id号),查看第一层容器中的小容器list的内存地址id号 2324900812864 >>> li2 可以看到 li2 与li1 不管是第一层。还是第二层的内存地址id号都全部一样 []] >>> 尝试修改 >>> li1[0] = x" >>> li1[-1][-1] = 20 >>>]] >>> li2 可以看到li2随着li1而变化,不管是第一层还是第二层都跟着变化,因为内存引用都全部一样。 []] >>>
底层原理
Python 浅拷贝示例 浅拷贝,用到 >>> ==== 浅拷贝示例 ==== >>> >>> li1 = [ 第一层,查看第一层容器中的具体元素内存地址id号 3120557838512 >>> id(li1[-1]) 第二层(小容器id号),查看第一层容器中的小容器list的内存地址id号 3120557987904 >>>=============手动分割线============= >>> li2 = li1.copy() >>> id(li2) 第一层,查看第一层容器中的具体元素内存地址id号 3120557838512 >>> id(li2[-1]) 第二层(小容器id号),查看第一层容器中的小容器list的内存地址id号 3120557987904 >>> li2 可以看到 li2 与li1 第一层的内存地址已经发生了变化。只有第二层的内存引用地址一样 [ li2 仅仅只有第二层小容器list中的值发生了变化。而第一层中的str不可变类型并没有发生变化 []] >>>
底层原理Python 深拷贝示例 使用深拷贝需要导入Python的内置库, >>> ==== 深拷贝示例 ==== >>> >>> from copy import deepcopy deep深度的意思,copy就拷贝。 >>> li1 = [ 注意存储的数据类型。第一层存储2个不可变类型,1个可变类型小容器(list),第二层存储2个不可变 类型 >>> id(li1) 第二层(小容器id号),查看第一层容器中的小容器list的内存地址id号 3120558353280 >>>]] >>> deepcopy(li1) >>> id(li2) 第二层(小容器id号),查看第一层容器中的小容器list的内存地址id号 3120558904448 >>> li2 li2 由于小容器也新生成了一个。所以即使li1小容器中的值发生改变,li2小容器中的值依然是原本的值 []] >>>
底层原理其他图示?
?
?
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |