栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python-浅拷贝和深拷贝

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python-浅拷贝和深拷贝

目录

1.引用

2.浅拷贝

3.深拷贝


1.引用
x=[1,2,3]
y=x
print(y)

输出结果:[1,2,3]。

当一个变量指向数据结构时, 这就是引用。

x=[1,2,3]
y=x
print(y)
x[1]=1
print(y)

输出结果:[1,2,3]

                   [1,1,3]

当x指向的对象数据发生改变时,y也会发生改变,它们的关系如上图所示。

2.浅拷贝

①使用copy方法

x=[1,2,3]
y=x.copy() #copy函数
x[1]=1
print(x)
print(y)

输出结果:[1,1,3]

                  [1,2,3]

以下是它们的关系,x与y分别指向不同的数据对象:

②使用切片的方法实现copy方法

x=[1,2,3]
y=x[:]
x[1]=1
print(x)
print(y)

输出结果:[1,1,3]

                  [1,2,3]

以下是它们的关系,x与y分别指向不同的数据对象: 

 ③注意浅拷贝解决不了的问题

x=[[1,2,3],[4,5,6],[7,8,9]]
y=x.copy();
x[1][1]=0
print(x,end=' ')
print(y)

# 第二种方式:与上一个是一样的功能
import copy
x=[[1,2,3],[4,5,6],[7,8,9]]
y=copy.copy(x)
x[1][1]=0
print(x,end=' ')
print(y)

输出结果:[[1, 2, 3], [4, 0, 6], [7, 8, 9]]  [[1, 2, 3], [4, 0, 6], [7, 8, 9]]

以上结果得出,x是受y的影响的。

      由上图看出,copy()只是拷贝第一层的数据结构,而第二层的还是关联着,属于引用的关系,x是受y的影响的。所以对于嵌套的关系,需要使用深拷贝。

3.深拷贝

    要实现深拷贝我们要借助到copy模块,

import copy
x=[[1,2,3],[4,5,6],[7,8,9]]
y=copy.deepcopy(x)
x[1][1]=0
print(x,end=' ')
print(y)

输出结果:[[1, 2, 3], [4, 0, 6], [7, 8, 9]]  [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

deepcopy函数将原对象拷贝的同时,也将对象中所有引用的子对象一并进行了拷贝。如果存在多层嵌套的话,深拷贝360度全方位无死角地,每一层嵌套里面的数据。     

对应的关系就是:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/954191.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号