python中数字是否为可变类型


Posted in Python onJuly 08, 2020

本文以Python3为例,包括六种数据类型:

1、数字(Number):
        int整型
        long长整型
        float浮点数
        complex复数
        布尔值(0和1)
2、字符串(String)
3、列表(List)
4、元组(Tuple)
5、字典(Dictionary)
6、集合(Set)

通过id函数查看变量i的内存地址进行验证(使用hex(id(i)) 可以查看16进制的内存地址)

不可变类型:Number、String、Tuple

对不可变类型的变量重新赋值,实际上是重新创建一个不可变类型的对象,并将原来的变量重新指向新创建的对象(如果没有其他变量引用原有对象的话(即引用计数为0),原有对象就会被回收)。

对于不可变类型int,无论创建多少个不可变类型,只要值相同,都指向同个内存地址。

例如Number:

>>> number1 = 123
>>> id(number1)
8790928028112
>>> number2 = 123
>>> id(number2)
8790928028112
>>> number3 = 321
>>> id(number3)
49143760
>>>

可以看到执行 i += 1 时,内存地址都会变化,因为int 类型是不可变的。

>>> i = 5
>>> id(i)
8791205700368
>>> i += 1
>>> id(i)
8791205700400
>>>
>>> j = i
>>> id(j)
8791205700400
>>> j
6
>>>

可变类型:List、Dictionary、Set

对可变数据类型重新赋值,并没有创建新的对象。

例如List:

>>> list1 = [1,2,3,4,5]
>>> id(list1)
49307976
>>> list2 = [1,2,3,4,5]
>>> id(list2)
49307784
>>> list1.append(123)
>>> list1
[1, 2, 3, 4, 5, 123]
>>> id(list1)
49307976
>>>

如果执行list1=list2,因为list1、list2指向同个内存地址,而list1、list2的类型都是List,可变类型,对list1、list2任意一个List进行修改,都会影响另外一个List的值。

>>> list1
[1, 2, 3, 4, 5, 123]
>>> id(list1)
49307976
>>>
>>> list1 = list2
>>> id(list1)
49307784
>>> id(list2)
49307784
>>> list2
[1, 2, 3, 4, 5]
>>> list2.append(456)
>>> list1
[1, 2, 3, 4, 5, 456]
>>> list2
[1, 2, 3, 4, 5, 456]
>>>

总而言之:

不可变类型是指向值(Value),值不变,则对象不变;值变,则对象变。

可变数据类型是指向名字(Name),名不变,则对象不变;名变,则对象变。

内容扩展:

Python中可变类型和不可变类型的数据?

  1. 可变类型有list,dict.不可变类型有string,number,tuple.
  2. 当进行修改操作时,可变类型传递的是内存中的地址,也就是说,直接修改内存中的值,并没有开辟新的内存。
  3. 不可变类型被改变时,并没有改变原内存地址中的值,而是开辟一块新的内存,将原地址中的值复制过去,对这块新开辟的内存中的值进行操作。

到此这篇关于python中数字是否为可变类型的文章就介绍到这了,更多相关python中数字是不可变类型吗内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
在Windows系统上搭建Nginx+Python+MySQL环境的教程
Dec 25 Python
遍历python字典几种方法总结(推荐)
Sep 11 Python
Python实现可自定义大小的截屏功能
Jan 20 Python
python3.5基于TCP实现文件传输
Mar 20 Python
Python 创建新文件时避免覆盖已有的同名文件的解决方法
Nov 16 Python
python实现三次样条插值
Dec 17 Python
PyQt5实现简易电子词典
Jun 25 Python
Python实现蒙特卡洛算法小实验过程详解
Jul 12 Python
pycharm如何实现跨目录调用文件
Feb 28 Python
Django 设置admin后台表和App(应用)为中文名的操作方法
May 10 Python
Python3与fastdfs分布式文件系统如何实现交互
Jun 23 Python
Python如何读取、写入CSV数据
Jul 28 Python
如何让python的运行速度得到提升
Jul 08 #Python
opencv 图像加法与图像融合的实现代码
Jul 08 #Python
opencv 图像轮廓的实现示例
Jul 08 #Python
opencv 图像滤波(均值,方框,高斯,中值)
Jul 08 #Python
用opencv给图片换背景色的示例代码
Jul 08 #Python
python文件及目录操作代码汇总
Jul 08 #Python
Python预测2020高考分数和录取情况
Jul 08 #Python
You might like
php计算十二星座的函数代码
2012/08/21 PHP
wamp下修改mysql访问密码的解决方法
2013/05/07 PHP
“不能执行已释放的Script代码”错误的原因及解决办法
2007/09/09 Javascript
extjs grid设置某列背景颜色和字体颜色的方法
2010/09/03 Javascript
一个JS函数搞定网页标题(title)闪动效果
2014/05/13 Javascript
JS实现屏蔽shift,Ctrl,alt等功能键的方法
2015/06/01 Javascript
js实现仿Discuz文本框弹出层效果
2015/08/13 Javascript
基于jquery实现图片相关操作(重绘、获取尺寸、调整大小、缩放)
2015/12/25 Javascript
详解JS中Array对象扩展与String对象扩展
2016/01/07 Javascript
javascript运动效果实例总结(放大缩小、滑动淡入、滚动)
2016/01/08 Javascript
js字符串操作总结(必看篇)
2016/11/22 Javascript
JS+HTML5 FileReader实现文件上传前本地预览功能
2020/03/27 Javascript
使用canvas进行图像编辑的实例
2017/08/29 Javascript
js中的this的指向问题详解
2019/08/29 Javascript
layui+SSM的数据表的增删改实例(利用弹框添加、修改)
2019/09/27 Javascript
[38:51]2014 DOTA2国际邀请赛中国区预选赛 Orenda VS LGD-CDEC
2014/05/22 DOTA
[04:10]DOTA2英雄梦之声_第11期_圣堂刺客
2014/06/21 DOTA
[05:41]2014DOTA2西雅图国际邀请赛 小组赛7月10日TOPPLAY
2014/07/10 DOTA
python实现的jpg格式图片修复代码
2015/04/21 Python
在Python 3中实现类型检查器的简单方法
2015/07/03 Python
Python学习小技巧之列表项的推导式与过滤操作
2017/05/20 Python
安装python3的时候就是输入python3死活没有反应的解决方法
2018/01/24 Python
python 创建一个空dataframe 然后添加行数据的实例
2018/06/07 Python
python绘制热力图heatmap
2020/03/23 Python
pandas数据处理之绘图的实现
2020/06/15 Python
calendar在python3时间中常用函数举例详解
2020/11/18 Python
python中判断数字是否为质数的实例讲解
2020/12/06 Python
python中的插入排序的简单用法
2021/01/19 Python
HTML5 LocalStorage 本地存储刷新值还在
2017/03/10 HTML / CSS
米兰网婚纱礼服法国网上商店:Milanoo法国
2016/08/20 全球购物
Luxplus瑞典:香水和美容护理折扣
2018/01/28 全球购物
如何写一个自定义标签
2012/12/28 面试题
中专毕业生自我鉴定范文
2013/11/09 职场文书
社区矫正工作方案
2014/06/04 职场文书
夫妻分居协议书范本
2014/11/28 职场文书
2016春季校长开学典礼致辞
2015/11/26 职场文书