深浅拷贝(以python为例)
2023-06-22 11:39:22 16 举报
AI智能生成
深浅拷贝
作者其他创作
大纲/内容
获得引用
基本定义
只是创建了一个指向已存在对象的新引用,没有复制任何数据
意味着有多个指针指向同一块内存空间,更改引用的任何一个会影响所有其他引用
示例
a = [[1, 2, 3], [4, 5, 6]]
b = a
a和b都指向同一对象,修改b会影响a
进程空间上
并没有新的空间分配,新的引用和原有的引用都指向内存中的同一个地址
任何对新引用的修改都会反映在原始对象上,因为它们实际上是同一个对象。
浅拷贝
基本定义
复制了对象及其顶层数据,但是不复制深层(嵌套)对象,它们仍然是引用
更改浅拷贝中的嵌套对象,那么原始对象也会被更改,因为它们共享同一个嵌套对象
示例
a = [[1, 2, 3], [4, 5, 6]]
b = a.copy()
a和b是独立的,但是他们的元素(即[1, 2, 3]和[4, 5, 6])是同一对象,修改b的元素会影响a的元素。
如果我append一个新的List,就不会影响到a
但是如果我append在原有的列表中,就会影响到a
进程空间上
为新的顶层对象分配了新的内存空间,但是新的顶层对象的子对象仍然引用原始对象的子对象
也就是说,新旧对象的子对象在内存中的地址是相同的
对浅拷贝对象的子对象的任何修改都会反映在原始对象的子对象上。
深拷贝
基本定义
复制了对象和所有嵌套的对象。这就创建了原始对象的完全独立副本。
在内存中,这意味着复制了整个对象和所有嵌套对象的数据,每个副本都有自己的内存空间。
如果你更改了深拷贝中的任何东西,原始对象都不会受到影响,因为它们在内存中是完全独立的。
示例
a = [[1, 2, 3], [4, 5, 6]]
b = copy.deepcopy(a)
a和b以及他们的元素都是独立的,修改b或它的元素都不会影响a。
进程空间上
不仅为新的顶层对象分配了新的内存空间,而且还为所有子对象分配了新的内存空间
这样,新对象就与原始对象完全独立,对新对象的任何修改都不会影响原始对象。
0 条评论
下一页