IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 【python】浅拷贝和深度拷贝的区别 -> 正文阅读

[Python知识库]【python】浅拷贝和深度拷贝的区别

今天做隐写算法研究的时候出现了一个问题,简单的描述就是:在python中,把original_coeff_list[]和stego_coeff_list[]直接以等号赋值的形式联系起来了,隐写完成之后,需要对stego_coeff_list[]覆盖时,同步地也会对original_coeff_list[]覆盖

original_coeff_list = []
stego_coeff_list = original_coeff_list
for i in range(len(stego)):
	stego_coeff_list[i] = stego[i]
	
# 此时,修改掉的stego_coeff_list[i]也同步地在original_coeff_list[i]中更新了!

用另外一个例子来说明就是:以直接赋值的方式(直接等号)对arr2赋值时,若更改arr2的某个值,会同步地更新arr1中的值。然而,我们希望的效果是只改表arr2[0],而不改变arr1[0]。

import numpy as np
import copy

array1 = np.array([0, 1, 2, 3, 4, 5])
array2 = array1
# array2 = copy.deepcopy(array1)

array2[0] = 1

print("array1 = ", array1) # array1 =  [1 1 2 3 4 5]
print("array2 = ", array2) # array2 =  [1 1 2 3 4 5]

究其原因是因为python的底层逻辑和C/C++不相同,python用等号直接赋值的时候,是对对象的引用,实际上是把地址也传递过去了,所以对arr2修改的时候,也会对arr1修改(因为同步更新的是地址嘛)。

所以,这时候就需要用到python中的copy.deepcopy深度拷贝功能了,直接放链接:Python 直接赋值、浅拷贝和深度拷贝解析

python的深拷贝可以理解成又重新创建了一个对象,两个数组是相互独立的,所以arr2的更新不会对arr1造成影响。所以,只用一个copy.deepcopy()就可以完美解决实验碰到的这个问题啦!

import numpy as np
import copy

array1 = np.array([0, 1, 2, 3, 4, 5])
# array2 = array1
array2 = copy.deepcopy(array1)

array2[0] = 1

print("array1 = ", array1) # array1 =  [0 1 2 3 4 5]
print("array2 = ", array2) # array2 =  [1 1 2 3 4 5]
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-11-14 21:35:32  更:2021-11-14 21:36:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 23:59:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码