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 相关文章推荐
Python 可爱的大小写
Sep 06 Python
Python 快速实现CLI 应用程序的脚手架
Dec 05 Python
详解Python的hasattr() getattr() setattr() 函数使用方法
Jul 09 Python
对python条件表达式的四种实现方法小结
Jan 30 Python
Python facenet进行人脸识别测试过程解析
Aug 16 Python
浅谈python输出列表元素的所有排列形式
Feb 26 Python
python GUI库图形界面开发之PyQt5信号与槽基础使用方法与实例
Mar 06 Python
有趣的Python图片制作之如何用QQ好友头像拼接出里昂
Apr 22 Python
解决numpy矩阵相减出现的负值自动转正值的问题
Jun 03 Python
Python使用tkinter实现摇骰子小游戏功能的代码
Jul 02 Python
python 5个顶级异步框架推荐
Sep 09 Python
用Python仅20行代码编写一个简单的端口扫描器
Apr 08 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
pw的一个放后门的方法分析
2007/10/08 PHP
用PHP的超级变量$_POST获取HTML表单(HTML Form) 数据
2011/05/07 PHP
浅析Dos下运行php.exe,出现没有找到php_mbstring.dll 错误的解决方法
2013/06/29 PHP
Thinkphp 空操作、空控制器、命名空间(详解)
2017/05/05 PHP
PHP使用正则表达式实现过滤非法字符串功能示例
2018/06/04 PHP
PHP中ltrim()函数的用法与实例讲解
2019/03/28 PHP
Prototype 工具函数 学习
2009/07/23 Javascript
javascript数字数组去重复项的实现代码
2010/12/30 Javascript
jQuery + Flex 通过拖拽方式动态改变图片的代码
2011/08/03 Javascript
javascript学习基础笔记之DOM对象操作
2011/11/03 Javascript
Jquery中国地图热点效果-鼠标经过弹出提示层信息的简单实例
2014/02/12 Javascript
理解javascript回调函数
2014/12/28 Javascript
DOM操作和jQuery实现选项移动操作的简单实例
2016/06/07 Javascript
分类解析jQuery选择器
2016/11/23 Javascript
详解Vue-基本标签和自定义控件
2017/03/24 Javascript
xmlplus组件设计系列之文本框(TextBox)(3)
2017/05/03 Javascript
解决VUE框架 导致绑定事件的阻止冒泡失效问题
2018/02/24 Javascript
微信小程序实现topBar底部选择栏效果
2018/07/20 Javascript
原生JS实现前端本地文件上传
2018/09/08 Javascript
微信小程序 拍照或从相册选取图片上传代码实例
2019/08/28 Javascript
[43:36]Liquid vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python单链表简单实现代码
2016/04/27 Python
最近Python有点火? 给你7个学习它的理由!
2017/06/26 Python
Python中new方法的详解
2019/01/15 Python
Python文件读写常见用法总结
2019/02/22 Python
解决pyshp UnicodeDecodeError的问题
2019/12/06 Python
css3弹性盒模型实例介绍
2013/05/27 HTML / CSS
西部世纪面试题
2014/12/05 面试题
护理专业毕业生自我鉴定
2013/10/08 职场文书
房地产公司见习自我鉴定
2014/04/28 职场文书
教师演讲稿大全
2014/05/16 职场文书
科长个人四风问题整改措施思想汇报
2014/10/13 职场文书
2014年防汛工作总结
2014/12/08 职场文书
2015年档案室工作总结
2015/05/23 职场文书
百年孤独读书笔记
2015/06/29 职场文书
Django分页器的用法你都了解吗
2021/05/26 Python