python3可变与不可变数据类型
Python3中有六个标准的数据类型:
- Number(数字)
- String(字符串)
- List(列表)
- Dictionary(字典)
- Tuple(元组)
- Set(集合)
我理解的可变就是当一个变量创建时,在内存中申请一块空间用于存放对象,这个被申请的内存空间地址中的对象是可以改变的。当对这个对象进行一系列的操作时,这个内存空间地址不会改变,只会增加或缩减。如果这个对象是不可变的,那么在对对象进行操作时,必须在内存中的另外一个地方重新申请一块区域来存放操作后的对象。而老的内存空间会被python的垃圾回收机制处理掉。
具体的python内存相关知识请参考:http://www.cnblogs.com/fujiangong/p/5978247.html
不可变数据类型:
Number(数字)、String(字符串)、Tuple(元组)
实例:
>>> x = 1
>>> y = x
>>> x,y
(1, 1)
#使用内置函数id查看x,y的内存空间地址,可以看到x,y指向的同一个内存空间地址
>>> id(x),id(y)
(1982197552, 1982197552)
#对变量x进行操作
>>> x += 1
#查看x,y的值,可看到x指向的对象已经改变
>>> x,y
(2, 1)
#再次查看x,y指向的内存空间地址,发现x指向的内存空间已经改变。这是因为变量x和变量y属于不可变数据类型:整数数字
>>> id(x),id(y)
(1982197584, 1982197552)
可变数据类型:
List(列表)、Dictionary(字典)
实例:
>>> lst = [1,2,3,4]
#查看lst的内存空间位置
>>> id(lst)
798098221256
#对lst进行添加操作
>>> lst.append(5)
>>> lst
[1, 2, 3, 4, 5]
#再次查看lst的内存空间,可以发现虽然lst指向对象的内容发生了改变,但是lst的内存空间地址并没有改变
>>> id(lst)
798098221256
python3可变与不可变数据类型的更多相关文章
- Python编程Day5——可变与不可变类型、数据类型整合
一.可变与不可变类型1.可变类原值型:只改变,但id不变,证明就是在改变原值,是可变类型2.不可变类型:值改变,但id也跟着改变,证明是产生了新的值,是不可变类型 x= print(id(x)) x= ...
- python的可变与不可变数据类型
<python的可变与不可变数据类型> python与C/C++不一样,它的变量使用有自己的特点,当初学python的时候,一定要记住“一切皆为对象,一切皆为对象的引用”这句话,其 ...
- Python3学习笔记03-基础数据类型
Python 中的变量不需要声明.每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建. 在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对 ...
- 关于:1.指针与对象;2.深浅拷贝(复制);3.可变与不可变对象;4.copy与mutableCopy的一些理解
最近对深浅拷贝(复制)做了一些研究,在此将自己的理解写下来,希望对大家有所帮助.本人尚处在摸索阶段,希望各位予以指正. 本文包括如下方向的探索: 1.指针与对象: 2.深/浅拷贝(复制): 3.可变/ ...
- 可变,不可变类型和hash
可变与不可变类型 截止到目前为止我们已经学过很多数据类型:数字类型.字符串类型.列表类型.元祖类型. 在python中,我们对数据类型还有另外一种分类方式,我们给数据类型分为可变数据类型和不可变数据类 ...
- JAVA不可变类与可变类、值传递与引用传递深入理解
一个由try...catch...finally引出的思考,在前面已经初步了解过不可变与可变.值传递与引用传递,在这里再次深入理解. 1.先看下面一个try..catch..finally的例子: P ...
- 可变、不可变数据类型和hash
一.可变和不可变数据类型 在python中,我们对数据类型除了分为数字类型.字符串类型.列表类型.元组类型.字典类型和集合类型外, 还有另外一种分类方式,我们给数据类型分为可变数据类型和不可变数据类型 ...
- python3从入门到精通之数据类型,布尔类型介绍
数据的类型 为了更充分的利用内存空间以及更有效率的管理内存,变量是有不同的类型的. Number(数字) int(整型) float(浮点型) complex(复数) bool(布尔) String( ...
- python基础之pip、.pyc、三元运算、进制、一切皆对象、可变与不可变类型
一.pip(下载工具==yum) 1.重点(必须掌握的) 列出已安装的包 pip list 安装要安装的包 pip install xxx 安装特定版本 pip install django==1.1 ...
- python 可变、不可变类型、深拷贝、浅拷贝理解
简介 python中数据分为可变类型,不可变类型.不同的数据类型影响着不同情况下的深浅拷贝. 下面则将简要介绍一下 可变类型 当某个数据的值发生改变时,它对应的内存地址不发生改变,常见的有列表.字典. ...
随机推荐
- osg
智能指针使用: osg::Geode* geode=new osg::Geode;//新建Geode指针 osg::ref_ptr<osg::Geode>geodePtr=geode;// ...
- 代码审查工具之PMD操作指南
上周客户要求对OA系统的代码质量进行了一个整体审查,并且要出一份报告给领导. 为此花了半天时间把代码审查工具PMD琢磨了下,现将具体操作步骤描述如下,以供大家参考! 1 前言 质量是衡量一个软件是否成 ...
- HDU1251 统计难题(Trie)
统计难题 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/Others) Total Subm ...
- jQuery整体架构源码解析
最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...
- C#中的 IList, ICollection ,IEnumerable 和 IEnumerator
IList, ICollection ,IEnumerable 很显然,这些都是集合接口的定义,先看看定义: // 摘要: // 表示可按照索引单独访问的对象的非泛型集合. [ComVisible(t ...
- 关于python保留几位小数,不进行四舍五入的方法
def cut(num,c): c=10**(-c) return (num//c)*c print cut(2.999,2) 不过有一部分数会出现问题,还请大神评论 例如: >>> ...
- Python Logging 模块研究
背景在一个新的项目里面加入了日志功能,想自己写一个,但是一个偶然的机会,通过google发现Python内建了一个非常强大的日志(log)模块:l... 背景 在一个新的项目里面加入了日志功能,想自己 ...
- Eclipse连接SVN服务器
(1)安装 eclipse SVN 插件 插件名称 site-1.4.8.zip Help --> SoftwareUpdates --->Find and Insta ...
- Android NDK 环境搭建 + 测试例程(转)
懒得废话一大堆概念,关于ADT.NDK的概念要是你不懂,怎么会搜到这里来?所以你只需要根据下面的步骤来,就可以完成NDK环境搭建了. 步骤:(假设你未安装任何相关开发工具,如果已经安装了,就可以跳过) ...
- Android(java)学习笔记222:开发一个多界面的应用程序之不同界面间互相传递数据(短信助手案例的优化:请求码和结果码)
1.开启界面获取返回值 (1)采用一种特殊的方式开启Activity: startActivityForResult(intent , 0): (2)在被开启的Activi ...