前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python中的深复制与浅复制

python中的深复制与浅复制

作者头像
羽翰尘
修改2019-11-26 17:03:13
1K0
修改2019-11-26 17:03:13
举报
文章被收录于专栏:技术向技术向

本文由腾讯云+社区自动同步,原文地址 https://cloud.tencent.com/developer/article/1540884

在使用python对数据对预处理,比如归一化、去噪时,发现处理后的数据会有诡异的

现象,比如全部都是一样的,或者某些都是一样的。

调查了一番之后,发现这是由于python中的深浅复制造成的。其实,归根结底这与python中的内存分配与管理方式有关。

下面对不同的复制做出结论。

直接引用

类似于a=[1,2,3] b = a, 这样的都是直接引用,b的值会随着a值的变动而变动

切片复制

切片复制主要是a=[1, 2, 3] b=a[:], 当被复制的对象内部只是基本类型而没有嵌套类型时,切片复制可以实现两个对象的隔离。

注意,嵌套类型指的是列表中还有列表,字典中嵌套列表等等复杂类型。

浅复制

指的是b = copy.copy(a)的情况,对简单类型有用

深复制

指的是b = copy.deepcopy(a)的情况,就是你所想象的两个对象互不影响的复制。

完整测试

代码语言:txt
复制
#encoding:utf-8
import numpy as np 
import copy
a = [1, 2 , 3, [4, 5]]
reference_a = a 
slice_copy_a = a[:]
shallow_copy_a = copy.copy(a)
deep_copy_a = copy.deepcopy(a)

# print original
print('Original a is\t\t ', a)
# 修改a的基本元素
a[0] = 100
# 修改a的复杂元素
a[3][0] = 1000

print('Now a is \t\t', a)
print('reference_a is\t\t', reference_a)
print('shallow copy is\t\t ', shallow_copy_a)
print('slice copy is \t\t', slice_copy_a)
print('deep copy is \t\t', deep_copy_a)

Reference:

  1. http://python.jobbole.com/82294/
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-03-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 直接引用
  • 切片复制
  • 浅复制
  • 深复制
  • 完整测试
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档