python的深浅拷贝,以及实现方法和应用场景+其他拷贝(¥71)

版权声明:转载请标明出处,谢谢了!https://blog.csdn.net/weixin_43721133 https://blog.csdn.net/weixin_43721133/article/details/89203479

深浅拷贝的定义:

浅拷贝只是增加了一个指针指向一个存在的地址,

深拷贝是增加一个指针并且开辟了新的内存,这个增加的指针指向这个新的内存,
采用浅拷贝的情况,释放内存,会释放同一内存,深拷贝就不会出现释放同一内存的错误

一层的情况:

import copy
 
# 浅拷贝
li1 = [1, 2, 3]
li2 = li1.copy()
li1.append(4)
print(li1, li2)  # [1, 2, 3, 4] [1, 2, 3]
 
# 深拷贝
li1 = [1, 2, 3]
li2 = copy.deepcopy(li1)
li1.append(4)
print(li1, li2)  # [1, 2, 3, 4] [1, 2, 3]

多层的情况:

import copy
 
# 浅拷贝 指向共有的地址
li1 = [1, 2, 3,[4,5],6]
li2 = li1.copy()
li1[3].append(7)
print(li1, li2)  # [1, 2, 3, [4, 5, 7], 6] [1, 2, 3, [4, 5, 7], 6]
 
# 深拷贝 重指向
li1 = [1, 2, 3,[4,5],6]
li2 = copy.deepcopy(li1)
li1[3].append(7)
print(li1, li2)  # [1, 2, 3, [4, 5, 7], 6] [1, 2, 3, [4, 5], 6]

其他

3. 拷贝的其他方式

浅拷贝对不可变类型和可变类型的copy不同

In [88]: a = [11,22,33]

In [89]: b = copy.copy(a)

In [90]: id(a)

Out[90]: 59275144

In [91]: id(b)

Out[91]: 59525600

In [92]: a.append(44)

In [93]: a

Out[93]: [11, 22, 33, 44]

In [94]: b

Out[94]: [11, 22, 33]

In [95]:

In [95]:

In [95]: a = (11,22,33)

In [96]: b = copy.copy(a)

In [97]: id(a)

Out[97]: 58890680

In [98]: id(b)

Out[98]: 58890680

分片表达式可以赋值一个序列

a = "abc"

b = a[:]

字典的copy方法可以拷贝一个字典

d = dict(name="zhangsan", age=27)

co = d.copy()

有些内置函数可以生成拷贝(list)

a = list(range(10))

b = list(a)

copy模块中的copy函数

import copy

a = (1,2,3)

b = copy.copy(a)

猜你喜欢

转载自blog.csdn.net/weixin_43721133/article/details/89203479