拷贝就是copy
,目的在于复制出一份一模一样的数据。使用相同的算法对于产生的数据有多种截然不同的用途时就可以使用copy
技术,将copy
出的各种副本去做各种不同的 *** 作。
值得一提的是绝大部分编程语言中对于copy
都有深浅拷贝的概念,所以充分的理解本章节的知识也是在为今后学习其他编程语言少走弯路。
在Python中,除开手动deepcopy()
,其他的任何 *** 作都是浅拷贝。
好了,废话不多说。直接进入主题,上代码:
>>> # ==== = 赋值示例 ====>>>>>> 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
,查看li2
的变化:
>>> li1[0] = x">>> li1[-1][-1] = 20>>>]]>>> li2 可以看到li2随着li1而变化,不管是第一层还是第二层都跟着变化,因为内存引用都全部一样。[]]>>>
底层原理赋值结论:
本体
1.修改不可变类型数据(如:第一层的
str
)2.修改可变数据类型中的数据(如:第二层小容器
List
中的数据)对应关系
拷贝体
1.不保持原本体中的值,跟随本体变化
2.不保持原本体中的值,跟随本体变化
Python 浅拷贝示例
浅拷贝,用到List
数据类型自带的方法,copy()
。我们来看一看会怎么样:
>>> ==== 浅拷贝示例 ====>>>>>> 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不可变类型并没有发生变化[]]>>>
底层原理浅拷贝结论:
本体
1.修改不可变类型数据(如:第一层的
str
)2.修改可变数据类型中的数据(如:第二层小容器
List
中的数据)对应关系
拷贝体
1.保持原本体中的值,不发生变化
2.不保持原本体中的值,跟随本体变化
Python 深拷贝示例
使用深拷贝需要导入Python的内置库,copy
,具体使用方式还是看代码:
>>> ==== 深拷贝示例 ====>>>>>> 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小容器中的值依然是原本的值[]]>>>
底层原理深拷贝结论:
本体
1.修改不可变类型数据(如:第一层的
str
)2.修改可变数据类型中的数据(如:第二层小容器
List
中的数据)对应关系
拷贝体
1.保持原本体中的值,不发生变化
2.保持原本体中的值,不发生变化
@H_419_488@
其他图示
以上是内存溢出为你收集整理的底层剖析Python深浅拷贝全部内容,希望文章能够帮你解决底层剖析Python深浅拷贝所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)