引用拷贝

赋值
模拟a=[1,2]

这里写图片描述

给另一个变量赋值
模拟 a=[1,2];b=a

这里写图片描述

改变值
a.add(3)
这里写图片描述

改变变量指向的地址
a=[1,2]
a=[1,2,3]

这里写图片描述

### 深拷贝、浅拷贝引用拷贝的区别 #### 定义与特性 深拷贝不仅创建一个新的对象,还递归地复制了原对象中的所有引用类型属性所指向的对象,直到这些属性都是基本数据类型为止。因此,新旧对象在内存中是完全独立的,对原始对象的任何修改都不会影响到深拷贝得到的对象[^2]。 浅拷贝只复制了一层对象本身及其包含的基本数据类型的值,而对于其中含有的其他复合对象(如列表、字典等),它仅仅是复制了它们的引用而不是其内容。这意味着如果被复制的对象内含有可变的数据结构,则源对象与其副本之间仍然共享这部分子对象,在这种情况下两者之间的更改会影响对方[^1]。 至于引用拷贝,并未真正意义上创建新的实例来存储相同的内容;相反,它是通过增加现有变量或容器内的计数器实现多处访问同一份物理上的实体资料。换句话说,多个名称实际上是指向同一个位置的不同标签而已[^4]。 #### 使用场景 - **浅拷贝适用场合** 对于那些仅需一层级分离或是内部组件无需单独变动的情形下,采用浅拷贝能够节省时间和空间成本。例如当处理简单的不可变集合时,因为成员项不会改变所以不必担心副作用问题。 - **深拷贝适合情况** 当面临复杂的嵌套结构且希望获得彻底隔离的新版本时应优先考虑使用深拷贝功能。这有助于防止意外的状态同步现象发生,尤其是在并发编程环境中尤为重要。 - **引用拷贝的应用领域** 如果目标是在不同地方操作相同的底层资源而不必重复分配额外的空间,那么利用引用方式传递参数不失为一种高效的选择。比如读取大文件或者共享昂贵计算结果的时候就可以采取这种方式减少不必要的开销。 ```python import copy # 创建一个包含列表和其他复杂对象的例子 original_list = [[1, 2], [3, 4]] ref_copy = original_list # 引用拷贝 shallow_copied = copy.copy(original_list) # 浅拷贝 deep_copied = copy.deepcopy(original_list) # 深拷贝 print("Original:", id(original_list), original_list) print("Reference Copy:", id(ref_copy), ref_copy) print("Shallow Copied:", id(shallow_copied), shallow_copied) print("Deep Copied:", id(deep_copied), deep_copied) # 修改其中一个元素看看效果差异 original_list[0][0] = 'A' print("\nAfter Modification:") print("Original:", original_list) print("Reference Copy:", ref_copy) print("Shallow Copied:", shallow_copied) print("Deep Copied:", deep_copied) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值