python基础(6)-深浅拷贝
2024-08-28 20:56:30
赋值
字符串和数字
# id()函数可以获取变量在内存中的地址标识 num1 = 2; num2 = 2; print(id(num1)) # result:8791124202560 print(id(num2)) # result:8791124202560 str1 = ' str2 = ' print(id(str1)) # result:39986040 print(id(str2)) # result:39986040
结论:对于数字和字符串来说,赋值时如果有相同的值在python管理的内存中,python内部会把这个值的引用(地址)指向被赋值的变量
列表&字典&元组
from copy import * list1 = [1, {'a': 1, 'b': 2}, ('a', 'b', 'c')] list2 = list1 #列表 print(id(list1)) # result:30433928 print(id(list2)) # result:30433928 #字典 print(id(list1[1])) # result:31017792 print(id(list2[1])) # result:31017792 #元组 print(id(list1[2])) # result:35446576 print(id(list1[2])) # result:35446576
结论:对于赋值,列表,字典,元组用的都是同一块地址
浅拷贝
字符串和数字
from copy import * str1 = ' str2 = copy(str1) # 使用copy模块里的copy()函数进行浅拷贝 print(id(str1)) # result:31204496 print(id(str2)) # result:31204496 num1 = 3 num2 = copy(num1) print(id(num1)) # rsult:8791078065248 print(id(num2)) # rsult:8791078065248
结论:数字和字符串的浅拷贝,与赋值相同,在内存当中用的也是同一个地址
列表&字典&元组
from copy import * list1 = [1, {'a': 1, 'b': 2}, ('a', 'b', 'c')] list2 = copy(list1) # 列表 print(id(list1)) # result:42354568 print(id(list2)) # result:42227400 # 字典 print(id(list1[1])) # result:30952256 print(id(list2[1])) # result:30952256 # 元组 print(id(list1[2])) # result:41082600 print(id(list2[2])) # result:41082600 tuple1 = (1, {'a': 1, 'b': 2}, ['a', 'b', 'c']) tuple2 = copy(tuple1) # 元组 print(id(tuple1)) # result:35668112 print(id(tuple2)) # result:35668112 # 字典 print(id(tuple1[1])) # result:30821256 print(id(tuple2[1])) # result:30821256 # 列表 print(id(tuple1[2])) # result:35862792 print(id(tuple2[2])) # result:35862792
结论:对于列表和字典,浅拷贝会拷贝第一层引用(但最外层是元组时,不会拷贝).
深拷贝
字符串和数字
from copy import * str1 = ' str2 = deepcopy(str1) # 使用copy模块里的copy()函数进行浅拷贝 print(id(str1)) # result:31269752 print(id(str2)) # result:31269752 num1 = 3 num2 = deepcopy(num1) print(id(num1)) # rsult:8791074002016 print(id(num2)) # rsult:8791074002016
结论:无论是赋值或是浅拷贝亦或是深拷贝,字符串和数字都是用同一个地址
列表&字典&元组
from copy import * list1 = [1, {'a': 1, 'b': 2}, [1, 2, 3], ('a', 'b', 'c')] list2 = deepcopy(list1) # 外层列表 print(id(list1)) # result:32134984 print(id(list2)) # result:32133768 # 字典 print(id(list1[1])) # result:4410176 print(id(list2[1])) # result:31862720 # 列表 print(id(list1[2])) # result:32262088 print(id(list2[2])) # result:32262408 # 元组 print(id(list1[3])) # result:32038704 print(id(list2[3])) # result:32038704
结论:深拷贝会对列表和字典进行拷贝,但对于元组,深浅拷贝都会失效.
最新文章
- TCP/IP、Http、Socket的区别
- iOS--XML三种解析方法( XMLDictionary)、(GDataXMLNode)、(NSXMLParser)
- PEM (Privacy Enhanced Mail) Encoding
- jdk8飞行记录器配置
- hexo git配置问题笔记
- C#参数化SQL查询
- hdoj 1083 Courses【匈牙利算法】
- TCP keepalive under Linux
- C++拷贝构造函数详解 转
- C#字符串常见操作总结
- ajax常用操作
- JavaScript(第二十四天)【事件对象】
- 第一个Angular2的样例
- mysql 数据库的设计三范式
- C# 反射给对象赋值遇到的问题——类型转换
- Java大数相乘-hdu1063
- axios的基本概念及安装配置方法
- 关于连接oracle工具plsql的一些使用
- HttpClient实现HTTP文件通用下载类
- s5-12 RIP