快捷搜索:  汽车  科技

python深拷贝对象(Python基础找茬系列06--浅拷贝和深拷贝)

python深拷贝对象(Python基础找茬系列06--浅拷贝和深拷贝)10 10 5 10 5 15 不可变数据赋值过程raw = 10 a = raw print(raw) print(a) raw = 5 print(raw) print(a) a = 15 print(raw) print(a) 输出结果:raw = [1 2 3 4 5] a = [1 2 3 4 5] raw = [1 2 3 4 5 6] a = [1 2 3 4 5 6] 可变数据赋值过程结论:当给可变数据类型直接赋值时,无论赋值的对象还是被赋值的对象发生改变,两者都同时变化2、不可变数据类型赋值

python深拷贝对象(Python基础找茬系列06--浅拷贝和深拷贝)(1)

文末有彩蛋一、概念

可变数据类型:列表list和字典dict。

不可变数据类型:整型int、浮点型float、字符串型string和元组tuple。

二、实例分析

1、可变数据类型赋值

raw = [1 2 3 4] raw.append(5) a = raw print('raw = ' raw) print('a = ' a) a.append(6) print('raw = ' raw) print('a = ' a)

输出结果:

raw = [1 2 3 4 5] a = [1 2 3 4 5] raw = [1 2 3 4 5 6] a = [1 2 3 4 5 6]

python深拷贝对象(Python基础找茬系列06--浅拷贝和深拷贝)(2)

可变数据赋值过程

结论:当给可变数据类型直接赋值时,无论赋值的对象还是被赋值的对象发生改变,两者都同时变化

2、不可变数据类型赋值

raw = 10 a = raw print(raw) print(a) raw = 5 print(raw) print(a) a = 15 print(raw) print(a)

输出结果:

10 10 5 10 5 15

python深拷贝对象(Python基础找茬系列06--浅拷贝和深拷贝)(3)

不可变数据赋值过程

当给不可变数据赋值时,无论被赋值对象还是赋值对象都互不影响对方

python深拷贝对象(Python基础找茬系列06--浅拷贝和深拷贝)(4)

3、浅拷贝

I、浅拷贝切片方式

raw = [1 2 3 4] a = raw[:] print(raw) print(a) print("==============") a.append(5) print(raw) print(a) print("==============") raw.append(6) print(raw) print(a)

输出结果:

[1 2 3 4] [1 2 3 4] ============== [1 2 3 4] [1 2 3 4 5] ============== [1 2 3 4 6] [1 2 3 4 5]

python深拷贝对象(Python基础找茬系列06--浅拷贝和深拷贝)(5)

II、浅拷贝切片方式:调用copy模块

raw = [1 2 3 4] a = copy.copy(raw) print(raw) print(a) print("==============") a.append(5) print(raw) print(a) print("==============") raw.append(6) print(raw) print(a)

输出结果:

[1 2 3 4] [1 2 3 4] ============== [1 2 3 4] [1 2 3 4 5] ============== [1 2 3 4 6] [1 2 3 4 5]

III、浅拷贝为什么叫浅拷贝,请看下面例子

import copy raw = [1 2 3 4 ['a' 'b']] a = copy.copy(raw) print(raw) print(a) print("==============") raw[4].append('c') print(raw) print(a) print("==============") a[4].append('d') print(raw) print(a) print("==============")

输出结果:

[1 2 3 4 ['a' 'b']] [1 2 3 4 ['a' 'b']] ============== [1 2 3 4 ['a' 'b' 'c']] ============== [1 2 3 4 ['a' 'b' 'c' 'd']] [1 2 3 4 ['a' 'b' 'c' 'd']] ==============

python深拷贝对象(Python基础找茬系列06--浅拷贝和深拷贝)(6)

import copy raw = [1 2 3 4 ['a' 'b']] a = copy.copy(raw) print(raw) print(a) print("==============") raw.append(5) print(raw) print(a) print("==============") a.append(6) print(raw) print(a) print("==============")

输出结果:

[1 2 3 4 ['a' 'b']] [1 2 3 4 ['a' 'b']] ============== [1 2 3 4 ['a' 'b'] 5] [1 2 3 4 ['a' 'b']] ============== [1 2 3 4 ['a' 'b'] 5] [1 2 3 4 ['a' 'b'] 6] ==============

拷贝父对象,不会拷贝对象的内部的子对象

python深拷贝对象(Python基础找茬系列06--浅拷贝和深拷贝)(7)

4、深拷贝为什么叫深拷贝,请看下面例子

import copy raw = [1 2 3 4 ['a' 'b']] a = copy.deepcopy(raw) print(raw) print(a) print("==============") raw.append(5) print(raw) print(a) print("==============") a.append(6) print(raw) print(a) print("==============")

输出结果:

[1 2 3 4 ['a' 'b']] [1 2 3 4 ['a' 'b']] ============== [1 2 3 4 ['a' 'b'] 5] [1 2 3 4 ['a' 'b']] ============== [1 2 3 4 ['a' 'b'] 5] [1 2 3 4 ['a' 'b'] 6] ============== import copy raw = [1 2 3 4 ['a' 'b']] a = copy.deepcopy(raw) print(raw) print(a) print("==============") raw[4].append('c') print(raw) print(a) print("==============") a[4].append('d') print(raw) print(a) print("==============")

输出结果:

[1 2 3 4 ['a' 'b']] [1 2 3 4 ['a' 'b']] ============== [1 2 3 4 ['a' 'b' 'c']] [1 2 3 4 ['a' 'b']] ============== [1 2 3 4 ['a' 'b' 'c']] [1 2 3 4 ['a' 'b' 'd']] ==============

python深拷贝对象(Python基础找茬系列06--浅拷贝和深拷贝)(8)

copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。

三、赠语黑发不知勤学早,白首方悔读书迟。

python深拷贝对象(Python基础找茬系列06--浅拷贝和深拷贝)(9)

四、彩蛋--python实例

《Python作品集004--七夕女友抽奖小程序》

python深拷贝对象(Python基础找茬系列06--浅拷贝和深拷贝)(10)

猜您喜欢: