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 相关文章推荐
批量获取及验证HTTP代理的Python脚本
Apr 23 Python
Python实现获取照片拍摄日期并重命名的方法
Sep 30 Python
python读文件保存到字典,修改字典并写入新文件的实例
Apr 23 Python
将string类型的数据类型转换为spark rdd时报错的解决方法
Feb 18 Python
Pandas时间序列重采样(resample)方法中closed、label的作用详解
Dec 10 Python
基于tensorflow指定GPU运行及GPU资源分配的几种方式小结
Feb 03 Python
Python matplotlib实时画图案例
Apr 23 Python
使用K.function()调试keras操作
Jun 17 Python
flask开启多线程的具体方法
Aug 02 Python
python生成xml时规定dtd实例方法
Sep 21 Python
Python将CSV文件转化为HTML文件的操作方法
Jun 30 Python
python实现局部图像放大
Nov 17 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类中private属性继承问题分析
2012/11/01 PHP
weiphp微信公众平台授权设置
2016/01/04 PHP
一文掌握PHP Xdebug 本地与远程调试(小结)
2019/04/23 PHP
PHP实现简单的协程任务调度demo示例
2020/02/01 PHP
jQuery 使用手册(五)
2009/09/23 Javascript
javaScript 删除字符串空格多种方法小结
2012/10/24 Javascript
$(document).ready(function() {})不执行初始化脚本
2014/06/19 Javascript
JS实现的最简Table选项卡效果
2015/10/14 Javascript
正则表达式(语法篇推荐)
2016/06/24 Javascript
使用Ajax生成的Excel文件并下载的实例
2016/11/21 Javascript
用director.js实现前端路由使用实例
2017/01/27 Javascript
js 将input框中的输入自动转化成半角大写(税号输入框)
2017/02/16 Javascript
浅谈jquery中ajax跨域提交的时候会有2次请求的问题
2017/11/10 jQuery
vue项目中引入vue-datepicker插件的详解
2019/05/14 Javascript
Vue实现搜索结果高亮显示关键字
2019/05/28 Javascript
Python检测字符串中是否包含某字符集合中的字符
2015/05/21 Python
python搭建微信公众平台
2016/02/09 Python
Python实现PS滤镜特效Marble Filter玻璃条纹扭曲效果示例
2018/01/29 Python
python3利用tcp实现文件夹远程传输
2018/07/28 Python
Python实现将字符串的首字母变为大写,其余都变为小写的方法
2019/06/11 Python
python 根据字典的键值进行排序的方法
2019/07/24 Python
python多线程同步之文件读写控制
2021/02/25 Python
python实现简单成绩录入系统
2019/09/19 Python
FLIR美国官网:热成像, 夜视和红外摄像系统
2018/07/13 全球购物
Sandro法国官网:法国成衣品牌
2019/08/28 全球购物
C++面试题目
2013/06/25 面试题
采购主管工作职责
2013/12/12 职场文书
药学专业大专生的自我评价
2013/12/12 职场文书
《十六年前的回忆》教学反思
2014/02/14 职场文书
技能竞赛活动方案
2014/02/21 职场文书
《美丽的南沙群岛》教学反思
2014/04/27 职场文书
酒店爱岗敬业演讲稿
2014/09/02 职场文书
2014年个人技术工作总结
2014/12/08 职场文书
2016高中社会实践心得体会范文
2016/01/14 职场文书
《曾国藩家书》读后感——读家书,立家风
2019/08/21 职场文书
nodejs利用readline提示输入内容实例代码
2021/07/15 NodeJs