Python中的深拷贝和浅拷贝

在Python中,拷贝是用于创建变量或对象副本的一种方式。深拷贝和浅拷贝是Python中两种不同的拷贝方式。它们之间的差异在于拷贝后的变量或对象副本与原始变量或对象的关系以及它们所占用的内存空间。

下面我会进行详细介绍:

1. 浅拷贝

浅拷贝是创建原始对象内部属性的副本的过程,但是,对于新对象的属性,它们实际上只是指向原始对象的引用。这意味着如果您更改新对象的属性,这些更改将反映在原始对象中。为了进行浅拷贝,可以使用copy模块中的shallowcopy()函数,或者使用切片操作符[:]。

示例:

python
import copy

x = [1, 2, [3, 4]]
y = copy.copy(x)
z = x[:]

y[0] = 10
z[0] = 20

print(x)  # [1, 2, [3, 4]]
print(y)  # [10, 2, [3, 4]]
print(z)  # [20, 2, [3, 4]]

y[2][0] = 30

print(x)  # [1, 2, [30, 4]]
print(y)  # [10, 2, [30, 4]]
print(z)  # [20, 2, [30, 4]]

可以看到,对于新列表y和z,更改它们的第一个元素并不影响原始列表x。但是,更改它们的第三个元素的第一个元素就会反映在原始列表x中的第三个元素的第一个元素中,这是由于它们都共享一个子列表。

2. 深拷贝

深拷贝是创建一个完全不同的副本对象的过程,该对象的所有属性都被复制,包括嵌套的对象和子对象。在深拷贝后,原始对象与新对象不再共享任何内容,也不再占用同一段内存空间。为了进行深拷贝,可以使用copy模块中的deepcopy()函数。

示例:

python
import copy

x = [1, 2, [3, 4]]
y = copy.deepcopy(x)

y[0] = 10
y[2][0] = 30

print(x)  # [1, 2, [3, 4]]
print(y)  # [10, 2, [30, 4]]

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
浅拷贝深拷贝Python用于复制对象的两种方式。浅拷贝只复制了对象的外层列表,内层列表会跟随原列表进行改变,两者互相影响。而深拷贝则是拷贝了所有的数据,并开辟了一个新的内存地址,原数据和拷贝数据不在同一个地址,两者互不影响。 在Python,赋值语句总是创建对象的引用,而不是复制对象。因此,赋值操作只是拷贝了对象的引用。而拷贝操作是创建了一个新对象,并将原对象的值复制到新对象浅拷贝可以使用多种方法实现,包括使用数据类型本身的构造器、使用copy.copy()函数、使用':'切片操作符以及直接赋值。 深拷贝则可以使用copy模块的deepcopy函数进行实现。 需要注意的是,浅拷贝只拷贝了外层列表,内层列表仍然是引用原对象的子对象。而深拷贝则递归拷贝了所有的子对象,源对象和拷贝对象的子对象也不相同。 总结来说,浅拷贝只拷贝了对象的外层列表,内层列表会跟随原列表进行改变,两者互相影响。而深拷贝则是拷贝了所有的数据,并开辟了一个新的内存地址,原数据和拷贝数据不在同一个地址,两者互不影响。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Python 深拷贝浅拷贝详解](https://blog.csdn.net/qq_40630902/article/details/119278072)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Python浅拷贝深拷贝](https://blog.csdn.net/qq_52703934/article/details/123167223)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值