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中关于Sequence切片的下标问题详解
Jun 15 Python
python3 模拟登录v2ex实例讲解
Jul 13 Python
python虚拟环境的安装配置图文教程
Oct 20 Python
详解Python3.6安装psutil模块和功能简介
May 30 Python
python使用正则筛选信用卡
Jan 27 Python
django 自定义过滤器的实现
Feb 26 Python
TensorFlow tf.nn.max_pool实现池化操作方式
Jan 04 Python
利用Python脚本实现自动刷网课
Feb 03 Python
Python双链表原理与实现方法详解
Feb 22 Python
Django中的session用法详解
Mar 09 Python
python 用opencv实现图像修复和图像金字塔
Nov 27 Python
Python字符串常规操作小结
Apr 03 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 删除记录实现代码
2009/03/12 PHP
Memcache 在PHP中的使用技巧
2010/02/08 PHP
ThinkPHP模板替换与系统常量及应用实例教程
2014/08/22 PHP
CI框架封装的常用图像处理方法(缩略图,水印,旋转,上传等)
2016/11/22 PHP
PHP下载文件函数与用法示例
2019/09/27 PHP
laravel请求参数校验方法
2019/10/10 PHP
php下的原生ajax请求用法实例分析
2020/02/28 PHP
JavaScript Event学习第三章 早期的事件处理程序
2010/02/07 Javascript
不使用jquery实现js打字效果示例分享
2014/01/19 Javascript
javascript 小数取整简单实现方式
2014/05/30 Javascript
纯JavaScript实现获取onclick、onchange等事件的值
2014/12/29 Javascript
jQuery拖动元素并对元素进行重新排序
2015/12/30 Javascript
使用HTML5+Boostrap打造简单的音乐播放器
2016/08/05 Javascript
Node.js与MySQL交互操作及其注意事项
2016/10/05 Javascript
jquery.validate[.unobtrusive]和Bootstrap实现tooltip错误提示问题分析
2016/10/30 Javascript
jQuery.Validate表单验证插件的使用示例详解
2017/01/04 Javascript
jquery dataTable 获取某行数据
2017/05/05 jQuery
ReactNative实现Toast的示例
2017/12/31 Javascript
浅析从vue源码看观察者模式
2018/01/29 Javascript
详解Puppeteer 入门教程
2018/05/09 Javascript
JS实现移动端触屏拖拽功能
2018/07/31 Javascript
详解JavaScript实现动态的轮播图效果
2019/04/29 Javascript
layui文件上传控件带更改后数据传值的方法
2019/09/23 Javascript
JavaScript 自定义html元素鼠标右键菜单功能
2019/12/02 Javascript
js数组相减简单示例【删除a数组所有与b数组相同元素】
2020/03/04 Javascript
python求素数示例分享
2014/02/16 Python
Python实现爬取逐浪小说的方法
2015/07/07 Python
详解Swift中属性的声明与作用
2016/06/30 Python
python实现五子棋人机对战游戏
2020/03/25 Python
Tensorflow 多线程与多进程数据加载实例
2020/02/05 Python
python Paramiko使用示例
2020/09/21 Python
python如何利用Mitmproxy抓包
2020/10/10 Python
餐饮营销方案
2014/02/23 职场文书
委托书范本
2014/09/13 职场文书
检讨书范文1000字
2015/01/28 职场文书
MySQL读取JSON转换的方式
2022/03/18 MySQL