深拷贝浅拷贝python,Python深拷贝和浅拷贝详解

  深拷贝浅拷贝python,Python深拷贝和浅拷贝详解

  深度复制和轻度复制是Python中的重要概念。本文将重点讨论NumPy中深度复制和轻度复制的定义和原理。让我们和边肖一起学吧。

  00-1010 1.导言2。浅抄2.1问题介绍2.2问题分析3。深抄3.1举个栗子3.2探究原因4。技能总结4.1判断是否指向同一个内存4.2其他数据类型5。摘要

  

目录

  深度复制和浅层复制是Python中的重要概念。本文重点介绍NumPy中深度拷贝和浅拷贝相关操作的定义和原理。

  废话少说,我们开始吧!

  

1. 引言

  

2. 浅拷贝

  举个栗子的例子吧。我们有两个数组A和B,如下所示。示例代码如下:

  将numpy作为np导入

  a=np.array([1,2,3])

  b=a

  打印( a=,a)

  打印( b=,b)

  输出如下所示:

  a=[1 2 3]

  b=[1 2 3]

  此时,如果我们对数组A进行以下更改,代码如下:

  将numpy作为np导入

  a=np.array([1,2,3])

  b=a

  a [0]=42

  打印( a=,a)

  打印( b=,b)

  所以我们的问题是:此时b的值应该是多少?

  运行上述代码后,我们得到如下输出:

  a=[42 2 3]

  b=[42 2 3]

  

2.1 问题引入

  有些人可能会认为输出应该是a=[42 2 3]和b=[1 2 3],但是运行上面的代码后,我们发现A和B的值都发生了相应的变化。这主要是由于Numpy中变量的赋值,它实际上是作为一个浅层拷贝发生的。

  换句话说,此时,两个变量指向同一个内存地址,如下所示:

  所以,如果我们此时修改数组original_array中的一个元素,copy_array与original_array共享同一个内存,那么其中的元素也会发生相应的变化。

  

2.2 问题剖析

  

3. 深拷贝

  如果要对Numpy数组进行深度复制,此时可以使用函数copy()。的相关示例代码如下:

  将numpy作为np导入

  a=np.array([1,2,3])

  b=a.copy()

  打印( a=,a)

  打印( b=,b)

  输出如下所示:

  a=[1 2 3]

  b=[1 2 3]

  此时,如果我们更改数组A中的元素,代码如下:

  将numpy作为np导入

  a=np.array([1,2,3])

  b=a.copy()

  a [0]=42

  打印( a=,a)

  打印( b=,b)

  此时的代码输出如下:

  a=[42 2 3]

  b=[1 2 3]

  

3.1 举个栗子

  查看上面的输出,我们可以清楚地看到数组A发生了变化,而数组B没有变化。这是因为我们使用深层拷贝。的存储器地址如下:

  由于original_array和copy_array指向不同的内存地址空间,我们对original_array的更改此时不会影响copy_array。

  

3.2 探究原因

  经过以上深抄和轻抄的例子和举例,相信大家都有了清晰的认识。然后,我们将以上知识点总结如下:

  

4. 技巧总结

  如果我们需要知道两个变量是否指向同一个内存地址,我们可以方便地使用is运算。

  浅层拷贝的示例:

  a=np.array([1,2,3])

  b=a

  打印(b是a)

  输出如下所示:

  真实的

  深层拷贝示例:

  a=np.array([1,2,3])

  b=a.copy()

  打印(b是a)

  输出如下所示:

  错误的

  

4.1 判断是否指向同一内存

  尽管本文中的所有示例都使用了NumPy数组,但本文中涉及的知识也适用于Python中的列表和字典等其他数据类型。

  简而言之,我们需要时刻牢记:在浅拷贝中,原数组和新数组一起执行同一块内存;同时,在深度复制中,新数组是原始数据的单独副本,它指向一个新的内存地址。

  

4.2 其他数据类型

  本文重点介绍Python中Numpy数组操作的浅拷贝和深拷贝背后的概念和原理,并给出相应的代码示例。

  关于如何理解Numpy中深度复制和浅层复制的这篇文章到此为止。关于Numpy的深度复制和浅度复制的更多信息,请搜索热门IT软件开发工作室之前的文章或者继续浏览下面的相关文章。希望大家以后多多支持热门IT软件开发工作室!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: