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中截取字符函数strip,lstrip,rstrip
Jul 17 Python
浅谈Python数据类型判断及列表脚本操作
Nov 04 Python
Python 调用Java实例详解
Jun 02 Python
python简单实现矩阵的乘,加,转置和逆运算示例
Jul 10 Python
Python模块汇总(常用第三方库)
Oct 07 Python
django 简单实现登录验证给你
Nov 06 Python
Python列表倒序输出及其效率详解
Mar 04 Python
python实现图像全景拼接
Mar 27 Python
python属于解释型语言么
Jun 15 Python
Python不支持 i ++ 语法的原因解析
Jul 22 Python
python 实现弹球游戏的示例代码
Nov 17 Python
10个python爬虫入门基础代码实例 + 1个简单的python爬虫完整实例
Dec 16 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 数组实例说明
2008/08/18 PHP
关于二级目录拖拽排序的实现(源码示例下载)
2013/04/26 PHP
ThinkPHP模板比较标签用法详解
2014/06/30 PHP
php数组添加与删除单元的常用函数实例分析
2015/02/16 PHP
thinkphp Apache配置重启Apache1 restart 出错解决办法
2017/02/15 PHP
Javascript 调试利器 Firebug使用详解六
2009/07/05 Javascript
javascript中类的定义及其方式(《javascript高级程序设计》学习笔记)
2011/07/04 Javascript
jQuery版仿Path菜单效果
2011/12/15 Javascript
js 获取时间间隔实现代码
2014/05/12 Javascript
JavaScript常用验证函数实例汇总
2014/11/25 Javascript
JS实现鼠标滑过折叠与展开菜单效果代码
2015/09/06 Javascript
jQuery中each()、find()和filter()等节点操作方法详解(推荐)
2016/05/25 Javascript
一个非常好用的文字滚动的案例,鼠标悬浮可暂停[两种方案任选]
2016/12/01 Javascript
js图片放大镜效果实现方法详解
2020/10/28 Javascript
浅谈Node.js轻量级Web框架Express4.x使用指南
2017/05/03 Javascript
微信小程序上滑加载下拉刷新(onscrollLower)分批加载数据(一)
2017/05/11 Javascript
vue拦截器实现统一token,并兼容IE9验证功能
2018/04/26 Javascript
Angular实现模版驱动表单的自定义校验功能(密码确认为例)
2018/05/17 Javascript
vue实现类似淘宝商品评价页面星级评价及上传多张图片功能
2018/10/29 Javascript
详解vue-cli3 中跨域解决方案
2019/04/10 Javascript
解决VUE自定义拖拽指令时 onmouseup 与 click事件冲突问题
2020/07/24 Javascript
[46:50]Liquid vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Django页面数据的缓存与使用的具体方法
2019/04/23 Python
PyQt5+Caffe+Opencv搭建人脸识别登录界面
2019/08/28 Python
Django通用类视图实现忘记密码重置密码功能示例
2019/12/17 Python
Keras框架中的epoch、bacth、batch size、iteration使用介绍
2020/06/10 Python
python 调整图片亮度的示例
2020/12/03 Python
Python爬虫设置Cookie解决网站拦截并爬取蚂蚁短租的问题
2021/02/22 Python
在数据文件自动增长时,自动增长是否会阻塞对文件的更新
2014/05/01 面试题
数控技术专业毕业自荐书范文
2014/02/05 职场文书
2014五一国际劳动节活动总结范文
2014/04/14 职场文书
个人借条范本
2015/05/25 职场文书
安娜卡列尼娜观后感
2015/06/11 职场文书
nginx前后端同域名配置的方法实现
2021/03/31 Servers
解读MySQL的客户端和服务端协议
2021/05/10 MySQL
PyCharm 安装与使用配置教程(windows,mac通用)
2021/05/12 Python