时间:2021-05-22
一、深浅copy
赋值运算
l1 = [1, 2, 3, [22, 33]]l2 = l1l1.append(666)print(l1) # [1, 2, 3, [22, 33], 666]print(l2) # [1, 2, 3, [22, 33], 666]图解:
注意:l2 = l1是一个指向,是赋值,和深浅copy无关。
浅copy
其实列表是一个一个的槽位,每个槽位存储的是该对象的内存地址
例1. 给大列表添加元素l1 = [1, 2, 3, [22, 33]]l2 = l1.copy()# 或者下面这种方式,也是浅copy# import copy# l2 = copy.copy(l1)l1.append(666)print(l1) # [1, 2, 3, [22, 33], 666]print(l2) # [1, 2, 3, [22, 33]]例2. 给小列表添加元素l1 = [1, 2, 3, [22, 33]]l2 = l1.copy()l1[-1].append(666)print(l1) # [1, 2, 3, [22, 33, 666]]print(l2) # [1, 2, 3, [22, 33, 666]]、例3. 将l1列表中第一个元素改为6l1 = [1, 2, 3, [22, 33]]l2 = l1.copy()l1[0] = 6print(l1) # [6, 2, 3, [22, 33]]print(l2) # [1, 2, 3, [22, 33]]图解:
例1
例2
例3
总结:
浅copy:会在内存中新开辟一个空间,存放这个copy的列表,但是列表里面的内容还是沿用之前对象的内存地址。
注意:
切片中,如果是全切,属于浅copy。
深copy
import copyl1 = [1, 2, 3, [22, 33]]l2 = copy.deepcopy(l1)l1.append(666)print(l1) # [1, 2, 3, [22, 33], 666]print(l2) # [1, 2, 3, [22, 33]]图解:
本质如下图:
但是python对深copy做了一个优化,将可变的数据类型在内存中重新创建一份,而不可变的数据类型则沿用之前的,所以内存中是下面这样的:
总结:
深copy:会在内存中开辟新空间,将原列表以及列表里面的可变数据类型重新创建一份,不可变数据类型则沿用之前的。
到此这篇关于图解Python中深浅copy(通俗易懂)的文章就介绍到这了,更多相关Python 深浅拷贝内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
k-means算法思想较简单,说的通俗易懂点就是物以类聚,花了一点时间在python中实现k-means算法,k-means算法有本身的缺点,比如说k初始位置的
关于python读取xml文章很多,但大多文章都是贴一个xml文件,然后再贴个处理文件的代码。这样并不利于初学者的学习,希望这篇文章可以更通俗易懂的教如何使
对于python多线程的理解,我花了很长时间,搜索的大部份文章都不够通俗易懂。所以,这里力图用简单的例子,让你对多线程有个初步的认识。单线程 在好些年前的MS
关于python读取xml文章很多,但大多文章都是贴一个xml文件,然后再贴个处理文件的代码。这样并不利于初学者的学习,希望这篇文章可以更通俗易懂的教如何使用p
有些时候,用图片更加能让读者理解,通俗易懂,我们将Word中某些文字替换成图片,例如,香蕉替换为香蕉的图案,公司替换为公司LOGO都是不错的选择。下面,我就简单