python的可变和不可变数据类型(python可变与不可变类型)
off999 2024-10-16 11:23 41 浏览 0 评论
不可变数据类型
python中不可变数据类型的定义为:当该数据类型的对应变量的值发生了改变,那么它对应的内存地址也会发生改变,就称不可变数据类型,包括:int(整型)、string(字符串)、tuple(元组)
整型
首先我们来看一下整型为什么是不可变数据类型。给一个变量x赋值,然后改变这个x的值,输出前后两次的内存地址id和数据类型type
- id():获取对象的内存地址
- type():当只有一个参数的时候,返回对象的类型。当有三个参数的时候返回一个类对象。
# 赋值 x = 1 # 打印x的内存地址和数据类型 print(id(x), type(x)) # 输出:8791164511056 <class 'int'> # 改变x的值 x = 2 # 打印改变后的x的内存地址和数据类型 print(id(x), type(x)) # 输出:8791164511088 <class 'int'>
从上面的代码我们可以得出,变量x为整型,且当x的值发生改变的时候,变量的内存地址也发生了改变。所以整型是不可变的数据类型。
字符串
根据上面的实例,我们把变量x的值换成字符串试试,看能不能得出字符串是不可变数据类型的结论呢~
# 赋值 x = 'abcdefg' # 打印x的内存地址和数据类型 print(id(x), type(x)) # 输出:30828000 <class 'str'> # 改变x的值 x = 'higklmn' # 打印改变后的x的内存地址和数据类型 print(id(x), type(x)) # 输出:30828168 <class 'str'>
代码中当变量改变时,变量的内存地址由30828000 变为了30828168 。所以字符串是不可变数据类型。
元组
元组被称为只读列表,即数据可以被查询,但不能被修改。如果我们强行修改元组中的数据,会报错。
t = (1, 2, 3, 4, 5) # 修改元组的值 t[1] = 100 会报错:TypeError: 'tuple' object does not support item assignment
可变数据类型
python中对可变数据类型的定义为:当该数据类型的对应变量的值发生了改变,那么它对应的内存地址不发生改变,就称可变数据类型。包括:set(集合)、list(列表)、dict(字典)
集合
我们先来看一下集合,定义一个集合set1,改变set1的值,且输出两次的内存地址
set1 = {1, 2, 3, '123'}
print("集合:", set1, "内存地址:", id(set1), "\t", "数据类型:", type(set1), "\t")
# 输出:集合: {1, 2, 3, '123'} 内存地址: 41388296 数据类型: <class 'set'>
# 给set1添加一个元素
set1.add(100)
print("集合:", set1, "内存地址:", id(set1), "\t", "数据类型:", type(set1), "\t")
# 输出:集合: {1, 2, 3, 100, '123'} 内存地址: 41388296 数据类型: <class 'set'>
从上面代码我们可以看出,即使一个集合发生了改变,这个集合的内存地址是不变的。所以集合是可变数据类型。
列表
list1 = [1, 2, 3, 4, 5]
print("列表:", list1, "内存地址:", id(list1), "\t", "数据类型:", type(list1), "\t")
# 输出:列表: [1, 2, 3, 4, 5] 内存地址: 1860168 数据类型: <class 'list'>
list1[0] = 100
print("列表:", list1, "内存地址:", id(list1), "\t", "数据类型:", type(list1), "\t")
# 输出:列表: [100, 2, 3, 4, 5] 内存地址: 1860168 数据类型: <class 'list'>
当列表中的值发生了改变时,内存地址依旧不变,所以列表是可变数据类型。
字典
字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据。字典中的key值必须是可哈希的数据类型,也就是整型,字符串,元组等。
dict1 = {'name': 'kkk', 'age': 18}
print("字典:", dict1, "内存地址:", id(dict1), "\t", "数据类型:", type(dict1), "\t")
# 字典: {'name': 'kkk', 'age': 18} 内存地址: 31033960 数据类型: <class 'dict'>
dict1['sex'] = 'man'
print("字典:", dict1, "内存地址:", id(dict1), "\t", "数据类型:", type(dict1), "\t")
# 字典: {'name': 'kkk', 'age': 18, 'sex': 'man'} 内存地址: 31033960 数据类型: <class 'dict'>
从上面代码可以看出,当字典中的元素发生改变时,内存地址不变,都是31033960。所以字典是可变数据类型。
相关推荐
- 应用程序无法启动0xc0000005
-
4、设备主板故障也会导致无信号,建议联系专业的维修人员上门检修。5、设备显卡手指边与手指边插槽接触不良,清理一下显卡的金手指边,重新插回去,重新固定住即可。应用程序错误0xc0000005解决方法如下...
- 移动硬盘分区方法详解(移动硬盘分区步骤)
-
1、进入管理页面将新买的移动硬盘插入计算机的USB接口,右击此电脑后选择管理。2、选择压缩卷在页面里选择“磁盘管理”,右击移动硬盘,选择“压缩卷”。3、输入压缩空间的大小输入压缩空间的大小,点击右下角...
- windows7副本不是正版影响使用吗
-
会经常弹出提示和安全警告,如果我们安装了一个非正版的windows系统,就会经常弹出此windows副本不是正版的提示,那么此windows副本不是正版有什么影响呢,其实除了视觉外,功能也会有影响。w...
-
- 100个有效qq号以及密码2025(2021最新qq号和密码大全)
-
有关QQ登记全国之最的数据目前并没有最新数据更新,最新的该项数据是截止于2019年12月的数据,接下来为大家带来QQ等级全国第一的用户的有关数据,仅供大家娱乐之用:截止2019年12月,全国qq等级第一名的名字叫做“小风波”,QQ等级高达1...
-
2026-01-13 05:51 off999
- 怎么更新ios版本(怎么更新ios版本15.0)
-
苹果系统升级到指定版本的方法:下载安装【爱思助手】,打开软件后用数据线连接iPhone和电脑。等待自动安装驱动,软件显示iPhone信息后点击左侧【下载固件】。在顶部选择手机型号,将固件类型改为【可刷...
- 免费安装电脑系统软件(免费安装电脑系统软件哪个好)
-
应该是可以的只要你舍得出钱一半来说就算是笔记本换系统去电脑城就行了不会超过50块还能给你把驱动全部打好为什么非要去苏宁装呢?朋友,你好:如果在买后一年以内,属于保修范围,装系统不收费,...
- 网络适配器消失了(空腹血糖6.0,总感觉口渴怎么办)
-
网络适配器不见了原因一:未安装网卡驱动 如果电脑的系统驱动安装包中无合适的驱动文件,导致网卡驱动未能安装,自己又不知道网卡的型号,可以先从其他地方复制一个网卡万能驱动来进行安装。电脑能够上网后,再下...
- 如何关闭杀毒软件和防火墙(电脑防火墙怎么设置)
-
问题一、怎样关闭防火墙? 1、展开桌面下的开始菜单,在搜索栏中输入【防火墙】; 2、选择搜索结果控制面板下的【Windows防火墙】程序进入; 3、选择左栏【打开或关闭Windows防火墙】...
- 中关村在线笔记本报价大全(中关村在线笔记本论坛)
-
i5的主机有很多种啊,目前比较高性能的联想主机是联想拯救者系列,其中一款是5299元。中关村的价格都不太准的,价格也不是实时更新的,你还不如直接看京东,参考如下:AMDR53500X处理器:10...
- win7音量图标不见了如何恢复
-
你好sese0955,win7音量图标关闭了,实际就是win7系统扬声器音量图标消失。你可以在提示栏点击小三角图标并打开,找到音量图标行为栏将‘仅显示通知’更改为‘显示图标和通知’,完成更改后记住点击...
-
- 安卓手机怎么关闭安全模式(安卓手机怎么关闭安全模式vivo)
-
下面介绍如何关闭oppor17安全模式的操作方法:第一步,打开oppor17手机,找到设置选项点击进入第二步,找到并且点击页面下方的其它设置选项。第三步,在出现的页面里,找到并且点击还原手机这个选项。第四步,找到并且点击抹掉全部内容和设置...
-
2026-01-13 00:51 off999
- windows xp 死机之歌(windows死机之歌完整)
-
无法正常关机,其原因有:1、关机前运行了很多程序尚未关闭,造成关机命令延后执行或系统假死。2、关机程序与其它程序发生冲突或损坏。3、病毒感染,或者是硬盘或内存出现问题等等。处理办法:1、强制...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
python入门到脱坑 输入与输出—str()函数
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
失业程序员复习python笔记——条件与循环
-
系统u盘安装(win11系统u盘安装)
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
