python专题

Python之深浅复制

2018-03-08  本文已影响0人  扯扯_2c79

深复制、浅复制

定义

浅复制:复制了最外围的对象本身,内部的元素都只是复制了一个引用而已。通俗的理解也就是将某个变量指向了该对象的地址,复制前后的两个变量指向同一个地址。

深复制:外围和内部元素都进行了复制,而不是引用。也就是,把对象复制存储到另一个地址空间上,并使变量指向这个新的地址空间。

应用范围

1,切片可应用于:列表、元组、字符串,但不能应用于字典。
2,深浅拷贝,既可应用序列(列表、元组、字符串),也可应用字典。

图解深、浅复制:

假设存在一个列表[1, 2, 3, 4, 5, 6]它的地址为“40005000”,其浅复制过程如图:


浅复制

同样假设存在一个列表['A', 'B', 'C']它的地址为“60008000”,其深复制过程如图:


深复制

程序示例:

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

print('list1:', list1)
print('list1的地址为:', id(list1))
print()

list2 = list1    #进行列表浅复制


print('list2', list2)
print('list2的地址为:', id(list2))
print()

list1[2] = 10
print('list1:', list1)
print('list2:', list2)
print()

list2[3] = 20
print('list1:', list1)
print('list2:', list2)
list1: [1, 2, 3, 4, 5]
list1的地址为: 1614951040008

list2 [1, 2, 3, 4, 5]
list2的地址为: 1614951040008

list1: [1, 2, 10, 4, 5]
list2: [1, 2, 10, 4, 5]

list1: [1, 2, 10, 20, 5]
list2: [1, 2, 10, 20, 5]
list1 = ['A', 'B', 'C', 'D', 'E']

print(list1)
print('list1的地址为:', id(list1))

print()
list2 = list1[:]    #进行列表深复制
print()

print(list2)
print('list2的地址为:', id(list2))

print()
list1[2] = 'Hello'
print('list1:', list1)
print('list2:', list2)

print()
list2[4] = 'World'
print('list1:', list1)
print('list2:', list2)
['A', 'B', 'C', 'D', 'E']
list1的地址为: 1614950970632


['A', 'B', 'C', 'D', 'E']
list2的地址为: 1614950980936

list1: ['A', 'B', 'Hello', 'D', 'E']
list2: ['A', 'B', 'C', 'D', 'E']

list1: ['A', 'B', 'Hello', 'D', 'E']
list2: ['A', 'B', 'C', 'D', 'World']

总结:

注意:以后在做数据的清洗、修改或者入库的时候,应对原数据进行深复制一份,以防数据修改之后,找不到原数据。

上一篇 下一篇

猜你喜欢

热点阅读