详解 Python 浅拷贝与深拷贝以及引用

一. Python 变量及其存储

1.1 Python 变量存储情况

在高级语言中,变量是对内存及其地址的抽象。对于python 而言,python 的一切变量都是对象,变量的存储,采用了引用语义的方式,存储的只是一个变量的值所在的内存地址,而不是指这个变量的本身:

  • 引用语义:在 python 中,变量保存的是对象(值)的引用,我们称为 引用语义。采用这种方式,变量所需的存储空间大小一致,因为变量只是保存了一个引用。也被称为对象语义指针语义

  • 值语义:有些语言采用的不是这种方式,它们把变量的值直接保存在变量的存储区里,这种方式被我们称为值语义,例如 C 语言,采用这种存储方式,每一个变量在内存中所占的空间就要根据变量实际的大小而定,无法固定下来。

  • 值语义和引用语义的区别:

    • 值语义: 死的、 傻的、 简单的、 具体的、 可复制的
  • 引用语义: 活的、 聪明的、 复杂的、 抽象的、 不可复制的

1.2 Python 数据类型地址存储

Python 的引用语义和 C 语言值语义在内存中的存储情况如下:

变量的每一次初始化,都会开辟了一个新的空间,将新内容的地址赋值给变量。对于下图来说,如果重复的给 str1 赋值,其在内存中的变化如下右图:


str1 在重复的初始化过程中,str1 中存储的元素地址由 ‘Hello world’ 的地址变成了 ‘new Hello world’ 的。

了解了 Python 变量赋值过程后,就应该明白 Python 的赋值过程相当于完全共享资源,一个值的改变会完全被另一个值共享。而实际应用是往往需要备份出一份数据而只对新值进行修改,这时候赋值就变得不是那么明智。引用 Python 浅拷贝与深拷贝概念为这方面提供了解决方案。

二. 深浅拷贝引入

经过上面讨论&#

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值