大数跨境

python中深拷贝与浅拷贝

python中深拷贝与浅拷贝 慧测
2021-08-26
0
导读:关注性能小课,成长不止一点点直接赋值 其实就是对象的引用(别名)。默认浅拷贝传递对象的引用而已,原始列表改变

关注性能小课,成长不止一点点



直接赋值

其实就是对象的引用(别名)。

默认浅拷贝传递对象的引用而已,原始列表改变,被赋值的b也会做相同的改变。

浅拷贝

拷贝父对象,不会拷贝对象的内部的子对象。没有拷贝子对象,所以原始数据改变,子对象会改变。

深拷贝

copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。包包含对象里面的自对象的拷贝,所以原始对象的改变不会造成深拷贝里任何子元素的改变。

字典浅拷贝实例:

>>>a = {1: [1,2,3]}
>>> b = a.copy()
>>> a, b
({1: [123]}, {1: [123]})
>>> a[1].append(4)
>>> a, b
({1: [1234]}, {1: [1234]})

深度拷贝需要引入 copy 模块:

>>>import copy
>>> c = copy.deepcopy(a)
>>> a, c
({1: [1234]}, {1: [1234]})
>>> a[1].append(5)
>>> a, c
({1: [12345]}, {1: [1234]})

#!/usr/bin/python
# -*-coding:utf-8 -*-
 
import copy
a = [1234, ['a''b']] #原始对象
 
b = a                       #赋值,传对象的引用
c = copy.copy(a)            #对象拷贝,浅拷贝
d = copy.deepcopy(a)        #对象拷贝,深拷贝
 
a.append(5)                 #修改对象a
a[4].append('c')            #修改对象a中的['a', 'b']数组对象
 
print( 'a = ', a )
print( 'b = ', b )
print( 'c = ', c )
print( 'd = ', d )

('a = ', [1234, ['a''b''c'], 5])
('b = ', [1234, ['a''b''c'], 5])
('c = ', [1234, ['a''b''c']])
('d = ', [1234, ['a''b']])

免费技术支持微信:15712862196

咨询QQ:2657535456

咨询微信号:huice666

慧测公众号




【声明】内容源于网络
0
0
慧测
专注人工智能前沿技术落地企业实战应用
内容 404
粉丝 0
慧测 专注人工智能前沿技术落地企业实战应用
总阅读104
粉丝0
内容404