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 相关文章推荐
MySQLdb ImportError: libmysqlclient.so.18解决方法
Aug 21 Python
python线程池(threadpool)模块使用笔记详解
Nov 17 Python
[原创]Python入门教程1. 基本运算【四则运算、变量、math模块等】
Oct 28 Python
Python 实现交换矩阵的行示例
Jun 26 Python
使用PyOpenGL绘制三维坐标系实例
Dec 24 Python
关于初始种子自动选取的区域生长实例(python+opencv)
Jan 16 Python
使用python检查yaml配置文件是否符合要求
Apr 09 Python
推荐值得学习的12款python-web开发框架
Aug 10 Python
Python使用urlretrieve实现直接远程下载图片的示例代码
Aug 17 Python
Django crontab定时任务模块操作方法解析
Sep 10 Python
Python读写csv文件流程及异常解决
Oct 20 Python
pytorch MSELoss计算平均的实现方法
May 12 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抓取https的内容的代码
2010/04/06 PHP
调整优化您的LAMP应用程序的5种简单方法
2011/06/26 PHP
VIM中设置php自动缩进为4个空格的方法详解
2013/06/14 PHP
PHP翻页跳转功能实现方法
2020/11/30 PHP
excel操作之Add Data to a Spreadsheet Cell
2007/06/12 Javascript
javascript学习笔记(七)利用javascript来创建和存储cookie
2011/04/08 Javascript
Jquery为单选框checkbox绑定单击click事件
2012/12/18 Javascript
js中哈希表的几种用法总结
2014/01/28 Javascript
jquery制作搜狐快站页面效果示例分享
2014/02/21 Javascript
JavaScript程序员应该知道的45个实用技巧
2014/03/04 Javascript
js自动生成的元素与页面原有元素发生堆叠的解决方法
2014/09/04 Javascript
修改或扩展jQuery原生方法的代码实例
2015/01/13 Javascript
Windows系统中安装nodejs图文教程
2015/02/28 NodeJs
node.js实现博客小爬虫的实例代码
2016/10/08 Javascript
Bootstrap的Carousel配合dropload.js实现移动端滑动切换图片
2017/03/10 Javascript
JS选取DOM元素常见操作方法实例分析
2018/12/10 Javascript
让 babel webpack vue 配置文件支持智能提示的方法
2019/06/22 Javascript
vue项目查看vue版本及cli版本的实现方式
2020/10/24 Javascript
python实现哈希表
2014/02/07 Python
一步步解析Python斗牛游戏的概率
2016/02/12 Python
Python 如何访问外围作用域中的变量
2016/09/11 Python
解决Python pandas plot输出图形中显示中文乱码问题
2018/12/12 Python
使用python telnetlib批量备份交换机配置的方法
2019/07/25 Python
用python中的matplotlib绘制方程图像代码
2019/11/21 Python
Python 下载Bing壁纸的示例
2020/09/29 Python
Banana Republic欧盟:美国都市简约风格的代表品牌
2018/05/09 全球购物
新加坡网上花店:FlowerAdvisor新加坡
2018/10/05 全球购物
政府信息公开实施方案
2014/05/09 职场文书
学生会辞职信
2015/03/02 职场文书
人事任命通知书
2015/04/21 职场文书
重阳节座谈会主持词
2015/07/03 职场文书
运动会跳远广播稿
2015/08/19 职场文书
幼儿园迎新生欢迎词
2015/09/30 职场文书
详解Vue的options
2021/05/15 Vue.js
JavaScript最完整的深浅拷贝实现方式详解
2022/02/28 Javascript
浅谈Node的内存泄露问题
2022/05/06 NodeJs