【Python】Python 直接赋值、浅拷贝和深度拷贝解析
2017-08-29 17:27
337 查看
直接赋值:其实就是对象的引用(别名)。
浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。
深拷贝(deepcopy):copy模块的deepcopy方法,完全拷贝了父对象及其子对象。
实例:
实例输出:
深度拷贝需要引入
实例:
实例输出:
解析:
1、
2、
3、
更多实例
以下实例是使用
以上实例执行输出结果为:
浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。
深拷贝(deepcopy):copy模块的deepcopy方法,完全拷贝了父对象及其子对象。
实例:
a = {1:[1,2,3]} b = a.copy() print("a:",a) print("b:",b) a[1].append(4) print("a:",a) print("b:",b)
实例输出:
a: {1: [1, 2, 3]} b: {1: [1, 2, 3]} a: {1: [1, 2, 3, 4]} b: {1: [1, 2, 3, 4]}
深度拷贝需要引入
copy模块:
实例:
import copy a = {1:[1,2,3]} b = copy.deepcopy(a) print("a:",a) print("b:",b) a[1].append(4) print("a:",a) print("b:",b)
实例输出:
a: {1: [1, 2, 3]} b: {1: [1, 2, 3]} a: {1: [1, 2, 3, 4]} b: {1: [1, 2, 3]}
解析:
1、
b = a:赋值引用,
a和
b都指向同一个对象。
2、
b = a.copy(): 浅拷贝,
a和
b是一个独立的对象,但他们的子对象还是指向统一对象(是引用)。
3、
b = copy.deepcopy(a): 深度拷贝,
a和
b完全拷贝了父对象及其子对象,两者是完全独立的。
更多实例
以下实例是使用
copy模块的
copy.copy( 浅拷贝 )和(
copy.deepcopy):
import copy a = [1, 2, 3, 4, ['a', 'b']] b = a c = a.copy() d = copy.deepcopy(a) a.append(5) a[4].append('c') print ("a:",a) print ("b:",b) print ("c:",c) print ("d:",d)
以上实例执行输出结果为:
a: [1, 2, 3, 4, ['a', 'b', 'c'], 5] b: [1, 2, 3, 4, ['a', 'b', 'c'], 5] c: [1, 2, 3, 4, ['a', 'b', 'c']] d: [1, 2, 3, 4, ['a', 'b']]
相关文章推荐
- Python 直接赋值、浅拷贝和深度拷贝解析
- Python 直接赋值、浅拷贝和深度拷贝解析
- Python 直接赋值、浅拷贝和深度拷贝解析
- Python直接赋值、浅拷贝和深度拷贝解析
- Python 直接赋值、浅拷贝和深度拷贝解析
- Python随记(四)列表复制 之 直接赋值 浅拷贝 和 深度拷贝的分析
- 深度解析:python之浅拷贝与深拷贝
- python的直接赋值不会拷贝,只相当于变量的一个别名
- Python 直接赋值、浅拷贝和深拷贝
- Python 赋值、浅拷贝和深度拷贝
- Oracle中Clob类型处理解析(NHibernate long值绑定long列,或者是直接oraclecommand的插入的时候报错都能用,ORA-01461:仅可以插入LONG列的LONG值赋值
- Python FAQ2:赋值、浅拷贝、深拷贝的区别?
- Oracle直接路径加载--append的深度解析
- 深度解析Python动态语言
- 深入理解 python 中的赋值、引用、拷贝、作用域
- python赋值和拷贝----一切皆对象,参数皆引用
- Python引用传递、赋值规则以及深拷贝和浅拷贝
- 对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解
- python中的深拷贝与浅拷贝解析
- 【Python系列2】赋值、深度复制与传参