python 中赋值,深拷贝,浅拷贝的区别
时间:2022-09-27 11:10:56|栏目:Python代码|点击: 次
- 赋值:其实就是对象的引用(相当于取别名)。
- 浅拷贝(copy):拷贝父对象,不会拷贝对象内部的子对象,会引用子对象。
- 深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。
一、赋值实例
# a这个大列表是一个父对象,里面的小列表是a的一个子对象 a = [1, 2, 3, ["a", "b"]] # 赋值实例 b = a print("a:", a) print("b:", b) ## 打印结果 a: [1, 2, 3, ['a', 'b']] b: [1, 2, 3, ['a', 'b']]
解析:
b = a: 赋值引用,a 和 b 都指向同一个对象,所以得到的结果都一样
二、浅拷贝实例
# 浅拷贝实例 a = [1, 2, 3, ["a", "b"]] c = a.copy() # 第一次打印 print("a:", a) print("c:", c) # 给a对象中的子对象添加元素 a[3].append("c") print("a:", a) print("c:", c) # 给a这个父对象添加元素 a.append(4) print("a:", a) print("c:", c) ## 打印结果 a: [1, 2, 3, ['a', 'b']] c: [1, 2, 3, ['a', 'b']] a: [1, 2, 3, ['a', 'b', 'c']] c: [1, 2, 3, ['a', 'b', 'c']] a: [1, 2, 3, ['a', 'b', 'c'], 4] c: [1, 2, 3, ['a', 'b', 'c']]
解析:
c = a.copy(): 浅拷贝, a 和 c 是一个独立的对象,但他们的子对象还是指向统一对象(是引用子对象)。
三、深拷贝实例
# 深拷贝实例 import copy a = [1, 2, 3, ["a", "b"]] d = copy.deepcopy(a) # 第一次打印 print("a:", a) print("d:", d) # 给a对象中的子对象添加元素 a[3].append("c") print("a:", a) print("d:", d) # 给a这个父对象添加元素 a.append(4) print("a:", a) print("d:", d) ## 打印结果 a: [1, 2, 3, ['a', 'b']] d: [1, 2, 3, ['a', 'b']] a: [1, 2, 3, ['a', 'b', 'c']] d: [1, 2, 3, ['a', 'b']] a: [1, 2, 3, ['a', 'b', 'c'], 4] d: [1, 2, 3, ['a', 'b']]
解析:
d = copy.deepcopy(a): 深度拷贝, d 完全拷贝了a这个父对象及其子对象,a与d两者是完全独立的。
栏 目:Python代码
本文地址:http://www.codeinn.net/misctech/214805.html