Python必知必会系列Python

python必知必会11

2022-03-21  本文已影响0人  Nefelibatas

Python 里面如何拷贝一个对象?

直接赋值:其实就是对象的引用(别名)。

浅拷贝 (shallow copy):拷贝父对象,不会拷贝对象的内部的子对象,子对象仍只是使用引用而已;

深拷贝 (deep copy):完全拷贝了父对象及其子对象,不仅拷贝了对象,同时也拷贝了对象中的元素,获得了全新的对象,与被拷贝对象完全独立,但这需要牺牲一定的时间和空间。

先看看一个最简单的直接拷贝

a = [1,2]
b = a
a.append(3)
a
[1, 2, 3]
b
[1, 2, 3]

b 对 a 只是一个引用而已。a 指向一个对象,把 a 拷贝给 b 的时候,也只是告诉 b 去指向一个列表对象。当 a 去做添加元素的操作时,是作用于那个对象,那么 b 和 a 所指向的是同一个对象,所以,a 和 b 的值同时发生了变化。

用 copy.copy 去浅拷贝 a

import copy
c = copy.copy(a)
a.append(4)
a
[1, 2, 3, 4]
c
[1, 2, 3]

c 没有像 b 那样,随着 a 的值变化而变化,这是因为copy.copy 只复制了容器的最外层,这也是它的名字由来。也可以通过 id() 函数去查看它们所指的对象的内存位置,发现 a 和 b 的内存位置是一样的,c 则不同。这说明 c 另外开了一块内存去存放数据。

上一篇 下一篇

猜你喜欢

热点阅读