Python中浅拷贝的四种实现方法小结

  • Post category:Python

标题:Python中浅拷贝的四种实现方法小结

介绍:Python中,拷贝对象有两种方式,即浅拷贝和深拷贝。浅拷贝只拷贝最外层的对象本身,而不会拷贝其内容,也就是说,新的对象共享旧对象内部元素。本文将详细讲解Python中浅拷贝的四种实现方法。

一、使用切片实现浅拷贝

list1 = [1, 2, 3, [4, 5]]
list2 = list1[:]

切片操作可以对列表进行浅拷贝。上述代码中,list2 只是引用了 list1 中的对象本身,并没有拷贝 list1 中的列表元素。如果原列表中有可变对象,如上例中的列表 [4,5],那么新列表中的该元素仍将和旧列表元素指向同一地址,对其中一个元素进行修改时,另一个元素也随之修改。

示例代码:

list1 = [1, 2, 3, [4, 5]]
list2 = list1[:]
list2[3][0] = 6
print(list1)    # [1, 2, 3, [6, 5]]
print(list2)    # [1, 2, 3, [6, 5]]

二、使用copy()方法实现浅拷贝

list1 = [1, 2, 3, [4, 5]]
list2 = list1.copy()

列表对象有一个 copy() 方法,调用该方法可以完成浅拷贝操作。

示例代码:

list1 = [1, 2, 3, [4, 5]]
list2 = list1.copy()
list2[3][0] = 6
print(list1)    # [1, 2, 3, [6, 5]]
print(list2)    # [1, 2, 3, [6, 5]]

三、使用工厂函数list()实现浅拷贝

list1 = [1, 2, 3, [4, 5]]
list2 = list(list1)

list() 函数可以将可迭代对象转换为列表,如果将原列表传递给 list() 函数,可以使用该函数完成浅拷贝。

示例代码:

list1 = [1, 2, 3, [4, 5]]
list2 = list(list1)
list2[3][0] = 6
print(list1)    # [1, 2, 3, [6, 5]]
print(list2)    # [1, 2, 3, [6, 5]]

四、使用copy模块中的copy()函数实现浅拷贝

import copy
list1 = [1, 2, 3, [4, 5]]
list2 = copy.copy(list1)

Python 中的 copy 模块提供了 copy() 函数,使用该函数可以完成列表浅拷贝操作。

示例代码:

import copy
list1 = [1, 2, 3, [4, 5]]
list2 = copy.copy(list1)
list2[3][0] = 6
print(list1)    # [1, 2, 3, [6, 5]]
print(list2)    # [1, 2, 3, [6, 5]]

总结:

本文介绍了 Python 中浅拷贝的四种实现方法,包括使用切片、copy() 方法、list() 函数和 copy 模块中的 copy() 函数。其中前三种方法使用起来非常简单,也是大多数情况下使用的方式;copy 模块中的 copy() 函数虽然用的较少,但它是可以深度拷贝各种对象的,是个十分有用的函数。