社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

python的深拷贝与浅拷贝

初与久歌_4a05 • 3 年前 • 301 次点击  

给出一个列表

x=[1,2,3,4]

进行如下操作

y=x
y[0]=10
print(x)

[10,2,3,4]

用这种方式将x的值赋给y之后,修改y中的元素也会改变x中的元素。
因为y和x都是对同一块内存空间的引用。

我们可以创造x的一个浅拷贝

y=x[:]  #或者
y=x.copy()
y[0]=10
print(x)

[1,2,3,4]   #此时修改y的值,x不发生改变

重新定义一个新的列表x

x=[1,2,[3,4]]
y=x.copy()
y[0],y[2][0]=10,10
print(y)
print(x)

[10, 2, [10, 4]]
[1, 2, [10, 4]]

y的元素自然改变了,但是x中的一级元素发生改变,二级元素并没有发生改变。

浅拷贝,让一级元素有了独立的内存空间,二级元素仍然指向了被拷贝对象的二级元素的内存区域。即浅拷贝只复制了父对象,而不复制内部子对象。

我们这次导入copy模块

import copy
x=[1,2,[3,4]]
y=copy.deepcopy(x)
y[0],y[2][0]=10,10
print(y)
print(x)

[10, 2, [10, 4]]
[1, 2, [3, 4]]

此时一级元素和二级元素都没有发生改变。

python的默认拷贝方式是 浅拷贝
时间角度:浅拷贝花费时间更少;
空间角度:浅拷贝花费内存更少;
效率角度:浅拷贝只拷贝顶层数据,一般情况下比深拷贝效率高。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/74263
 
301 次点击