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

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

  本文主要介绍Python中Numpy的深层拷贝和浅层拷贝。通过讲解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]?但是运行完上面的代码,我们发现?答?然后呢。b?所有的价值观都相应地改变了。这主要是由于?Numpy?实际上,中变量的赋值操作是浅拷贝。

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

  那么,如果我们此时修改数组呢?原创_数组?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]

  此时,如果我们改变数组?答?代码如下:.元素

  将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 举个栗子

  看上面的输出,可以清楚的看到数组?答?数组变了?b?没有变化,这是因为我们使用了深层拷贝。

  此时的内存地址如下:

  因为?原创_数组?然后呢。复制_数组?指向不同的内存地址空间,所以这个时候我们是对的?原创_数组?改变不会是对的?复制_数组?有影响。

  

3.2 探究原因

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

  

4. 技巧总结

  如果需要知道两个变量是否指向同一个内存地址,可以方便的使用?是吗?操作。

  浅拷贝示例:

  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数组操作的浅拷贝和深拷贝背后的概念和原理,并给出相应的代码示例。

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

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

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