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 描述符(Descriptor)入门
Nov 20 Python
对numpy中array和asarray的区别详解
Apr 17 Python
Python操作mongodb的9个步骤
Jun 04 Python
Python numpy.array()生成相同元素数组的示例
Nov 12 Python
Python 把序列转换为元组的函数tuple方法
Jun 27 Python
python模拟鼠标点击和键盘输入的操作
Aug 04 Python
使用 tf.nn.dynamic_rnn 展开时间维度方式
Jan 21 Python
python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例
Mar 08 Python
xadmin使用formfield_for_dbfield函数过滤下拉表单实例
Apr 07 Python
关于Python解包知识点总结
May 05 Python
TensorFlow保存TensorBoard图像操作
Jun 23 Python
Python 串口通信的实现
Sep 29 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
上传文件先创建目录 再上传到目录里面去
2010/12/29 PHP
PHP使用DOMDocument类生成HTML实例(包含常见标签元素)
2014/06/25 PHP
php实现批量压缩图片文件大小的脚本
2014/07/04 PHP
使用ThinkPHP生成缩略图及显示
2017/04/27 PHP
PHP微信企业号开发之回调模式开启与用法示例
2017/11/25 PHP
php中错误处理操作实例分析
2019/08/23 PHP
浅谈javascript 面向对象编程
2009/10/28 Javascript
jQuery的12招常用技巧分享
2011/08/08 Javascript
Javascript insertAfter() 实现函数代码
2011/10/12 Javascript
js和jquery如何获取图片真实的宽度和高度
2014/09/28 Javascript
JS+CSS实现弹出全屏灰黑色透明遮罩效果的方法
2014/12/20 Javascript
jQuery简单实现图片预加载
2015/04/20 Javascript
javascript自动切换焦点控制效果完整实例
2016/02/02 Javascript
Javascript基础回顾之(二) js作用域
2017/01/31 Javascript
Vue实现路由跳转和嵌套
2017/06/20 Javascript
JQuery Ajax执行跨域请求数据的解决方案
2018/12/10 jQuery
浅谈vue后台管理系统权限控制思考与实践
2018/12/19 Javascript
JS实现处理时间,年月日,星期的公共方法示例
2019/05/31 Javascript
js实现自动播放匀速轮播图
2020/02/06 Javascript
vue-admin-template配置快捷导航的代码(标签导航栏)
2020/09/04 Javascript
python不换行之end=与逗号的意思及用途
2017/11/21 Python
python爬取m3u8连接的视频
2018/02/28 Python
Python列表倒序输出及其效率详解
2020/03/04 Python
Django中从mysql数据库中获取数据传到echarts方式
2020/04/07 Python
python相对企业语言优势在哪
2020/06/12 Python
Python爬虫模拟登陆哔哩哔哩(bilibili)并突破点选验证码功能
2020/12/21 Python
使用gunicorn部署django项目的问题
2020/12/30 Python
工程造价管理专业大专生求职信
2013/10/06 职场文书
酒店行政人事部经理职务说明书
2014/02/26 职场文书
大学生违纪检讨书300字
2014/10/25 职场文书
2014年客户经理工作总结
2014/11/20 职场文书
安全责任书
2015/01/29 职场文书
2016大学生就业指导课心得体会
2016/01/15 职场文书
理解python中装饰器的作用
2021/07/21 Python
SpringDataJPA在Entity中常用的注解介绍
2021/12/06 Java/Android
Win11 Beta 预览版 22621.575 和 22622.575更新补丁KB5016694发布(附更新内容大全)
2022/08/14 数码科技