Numpy深拷贝的概念和原理如何理解

Admin 2022-08-19 群英技术资讯 289 次浏览

这篇文章主要介绍“Numpy深拷贝的概念和原理如何理解”的相关知识,下面会通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Numpy深拷贝的概念和原理如何理解”文章能帮助大家解决问题。


目录
  • 1. 引言
  • 2. 浅拷贝
    • 2.1 问题引入
    • 2.2 问题剖析
  • 3. 深拷贝
    • 3.1 举个栗子
    • 3.2 探究原因
  • 4. 技巧总结
    • 4.1 判断是否指向同一内存
    • 4.2 其他数据类型
  • 5. 总结

    1. 引言

    深拷贝和浅拷贝是Python中重要的概念,本文重点介绍在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理。
    闲话少说,我们直接开始吧!

    2. 浅拷贝

    2.1 问题引入

    我们来举个栗子,如下所示我们有两个数组a和b,样例代码如下:

    import numpy as np
    a = np.array([1, 2, 3])
    b = a
    print('a =', a)
    print('b =', b)

    输出如下:

    a = [1 2 3]
    b = [1 2 3]

    此时如果我们对数组a做如下改变,代码如下:

    import numpy as np
    a = np.array([1, 2, 3])
    b = a
    a [0] = 42
    print('a =', a)
    print('b =', b)

    那么我们的问题为: 此时b的值应该为多少?
    运行上述代码后,我们得到输出如下:

    a = [42 2 3]
    b = [42 2 3]

    2.2 问题剖析

    也许有人会觉得输出应该为??a=[42 2 3]?? 和 ??b=[1 2 3]?? ,但是运行上述代码后我们发现??a??和??b??的值均发生了相应的改变。这主要是由于在??Numpy??中对变量的赋值操作,实际上发生的为浅拷贝。

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

    所以,此时如果我们修改数组??original_array??中的某个元素,`copy_array

    ??由于和??original_array`公用同一块内存,所以其中的元素也会发生相应的变化。

    3. 深拷贝

    3.1 举个栗子

    如果我们想要对??Numpy??数组执行深拷贝,此时我们可以使用函数??copy()??。

    相关的样例代码如下:

    import numpy as np
    a = np.array([1, 2, 3])
    b = a.copy()
    print('a =', a)
    print('b =', b)

    输出如下:

    a = [1 2 3]
    b = [1 2 3]

    此时,如果我们改变数组??a??中的元素,代码如下:

    import numpy as np
    a = np.array([1, 2, 3])
    b = a.copy()
    a [0] = 42
    print('a =', a)
    print('b =', b)

    此时的代码输出如下:

    a = [42 2 3]
    b = [1 2 3]

    3.2 探究原因

    观察上述输出,我们可以清楚地看到数组??a??发生了改变而数组??b??没有发生变化,这是由于我们使用了深拷贝。

    此时的内存地址如下:

    由于 ??original_array??和??copy_array??指向不同的内存地址空间,所以此时我们对??original_array??的改变并不会对??copy_array??带来影响。

    4. 技巧总结

    经过上述对深拷贝和浅拷贝的举例和示例,相信大家都已有了清晰的认识,接着我们对上述知识点进行总结,归纳如下:

    4.1 判断是否指向同一内存

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

    浅拷贝示例:

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

    输出如下:

    True

    深拷贝示例:

    a = np.array([1, 2, 3])
    b = a.copy()
    print(b is a)

    输出如下:

    False

    4.2 其他数据类型

    尽管本文中所有的示例都使用了NumPy数组,但本文中所涉及的知识也适用于Python中的列表和字典等其他数据类型。
    总之,我们需要时刻记载心中:在浅拷贝中,原始数组和新的数组共同执行同一块内存;同时在深拷贝中,新的数组是原始数据的单独的拷贝,它指向一块新的内存地址。

    5. 总结

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


    以上就是关于“Numpy深拷贝的概念和原理如何理解”的相关知识,感谢各位的阅读,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注群英网络,小编每天都会为大家更新不同的知识。
    群英智防CDN,智能加速解决方案
    标签: Numpy深拷贝

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。

    猜你喜欢

    成为群英会员,开启智能安全云计算之旅

    立即注册
    专业资深工程师驻守
    7X24小时快速响应
    一站式无忧技术支持
    免费备案服务
    免费拨打  400-678-4567
    免费拨打  400-678-4567 免费拨打 400-678-4567 或 0668-2555555
    在线客服
    微信公众号
    返回顶部
    返回顶部 返回顶部
    在线客服
    在线客服