Python中可变类型与不可变类型、浅拷贝与深拷贝
2022/8/23 1:54:03
本文主要是介绍Python中可变类型与不可变类型、浅拷贝与深拷贝,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、可变类型与不可变类型
1.可变类型:列表、字典、集合
2.不可变类型:字符串、整数、元组
#可变类型赋值给一个新变量时,新变量所指id是不变的,当原变量发生变化时,因为所指id一样所以新变量也会发生变化,新旧相互影响
#不可变类型赋值给一个新变量,新变量所指的id在原变量不发生改变时,所指id不变,一旦新变量内容发生变化就会指向一个新id,新旧之间不影响
二、浅拷贝与深拷贝
1.浅拷贝:浅拷贝变量中,既有可变类型,又有不可变类型,拷贝的是地址
1 import copy 2 3 a = ['hello', [1, 2, 3]] 4 b = copy.copy(a) 5 print('原容器:', a, '地址:', [id(i) for i in a]) 6 print('浅拷贝:', b, '地址:', [id(j) for j in b]) 7 print('------------------------------------') 8 9 a[0] = 'world' 10 print(a) 11 print('原容器:', a, '地址:', [id(i) for i in a]) 12 print('浅拷贝:', b, '地址:', [id(j) for j in b])#浅拷贝是在另一块地址上创建一个新的变量,但是变量内的元素是源对象的元素的地址的拷贝 13 #拷贝的是地址 14 print('------------------------------------') 15 16 a[1].append(4) 17 print('原容器:', a, '地址:', [id(i) for i in a]) 18 print('浅拷贝:', b, '地址:', [id(j) for j in b]) 19 20 #浅拷贝时,拷贝变量内有不可变类型,当不可变类型被替换时,拷贝的还是指的旧id 21 #但是被拷贝对象的不可变类型id已经变化 22 #拷贝变量内有可变类型,其发生改变时id是不会变的,所以会相互影响
2.深拷贝:在新的地址上新建一个拷贝副本,只拷贝值,不拷贝地址
1 import copy 2 3 a = ['hello', [1, 2, 3]] 4 c = copy.deepcopy(a) 5 print('原容器:', a, '地址:', [id(i) for i in a]) 6 print('深拷贝:', c, '地址:', [id(j) for j in c]) 7 a[0] = 'world' 8 a[1].append(4) 9 print('原容器修改后:', a, '地址:', [id(i) for i in a]) 10 print('原容器修改后深拷贝:', c, '地址:', [id(j) for j in c]) 11 12 #结果 13 14 #原容器: ['hello', [1, 2, 3]] 地址: [2165485837360, 2165485804224] 15 #深拷贝: ['hello', [1, 2, 3]] 地址: [2165485837360, 2165485667712] 16 #原容器修改后: ['world', [1, 2, 3, 4]] 地址: [2165485837552, 2165485804224] 17 #原容器修改后深拷贝: ['hello', [1, 2, 3]] 地址: [2165485837360, 2165485667712]
这篇关于Python中可变类型与不可变类型、浅拷贝与深拷贝的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器
- 2024-11-16四种数据科学Web界面框架快速对比:Rio、Reflex、Streamlit和Plotly Dash
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门