Python的每个对象都分为可变和不可变,主要的核心类型中,数字、字符串、元组是不可变的,列表、字典是可变的。

对不可变类型的变量重新赋值,实际上是重新创建一个不可变类型的对象,并将原来的变量重新指向新创建的对象(如果没有其他变量引用原有对象的话(即引用计数为0),原有对象就会被回收)。

不可变类型以int类型为例:实际上 i += 1 并不是真的在原有的int对象上+1,而是重新创建一个value为6的int对象,i引用自这个新的对象。

>>> i = 5

>>> i += 1

>>> i

6

通过id函数查看变量i的内存地址进行验证(使用hex(id(i)) 可以查看16进制的内存地址)

>>> i = 5

>>> i += 1

>>> i

6

>>> id(i)

140243713967984

>>> i += 1

>>> i

7

>>> id(i)

140243713967960

可以看到执行 i += 1 时,内存地址都会变化,因为int 类型是不可变的。

再改改代码,但多个int类型的变量值相同时,看看它们内存地址是否相同。

>>> i = 5

>>> j = 5

>>> id(i)

140656970352216

>>> id(j)

140656970352216

>>> k = 5

>>> id(k)

140656970352216

>>> x = 6

>>> id(x)

140656970352192

>>> y = 6

>>> id(y)

140656970352192

>>> z = 6

>>> id(z)

140656970352192

对于不可变类型int,无论创建多少个不可变类型,只要值相同,都指向同个内存地址。同样情况的还有比较短的字符串。

对于其他类型则不同,以浮点类型为例,从代码运行结果可以看出它是个不可变类型:对i的值进行修改后,指向新的内存地址。

>>> i = 1.5

>>> id(i)

140675668569024

>>> i = i + 1.7

>>> i

3.2

>>> id(i)

140675668568976

修改代码声明两个相同值的浮点型变量,查看它们的id,发现它们并不是指向同个内存地址,这点和int类型不同(这方面涉及Python内存管理机制,Python对int类型和较短的字符串进行了缓存,无论声明多少个值相同的变量,实际上都指向同个内存地址。)。

>>> i = 2.5

>>> id(i)

140564351733040

>>> j = 2.5

>>> id(j)

140564351733016

可变类型的话,以list为例。list在append之后,还是指向同个内存地址,因为list是可变类型,可以在原处修改。

>>> a = [1, 2, 3]

>>> id(a)

4385327224

>>> a.append(4)

>>> id(a)

4385327224

改改代码,当存在多个值相同的不可变类型变量时,看看它们是不是跟可变类型一样指向同个内存地址

>>> a = [1, 2, 3]

>>> id(a)

4435060856

>>> b = [1, 2, 3]

>>> id(b)

4435102392

从运行结果可以看出,虽然a、b的值相同,但是指向的内存地址不同。我们也可以通过b = a 的赋值语句,让他们指向同个内存地址:

>>> a = [1, 2, 3]

>>> id(a)

4435060856

>>> b = [1, 2, 3]

>>> id(b)

4435102392

>>> b = a

>>> id(b)

4435060856

这个时候需要注意,因为a、b指向同个内存地址,而a、b的类型都是List,可变类型,对a、b任意一个List进行修改,都会影响另外一个List的值。

>>> b.append(4)

>>> a

[1, 2, 3, 4]

>>> b

[1, 2, 3, 4]

>>> id(a)

4435060856

>>> id(b)

4435060856

代码中,b变量append(4),对a变量也是影响的。输出他们的内存地址,还是指向同个内存地址。

python四种可变类型_Python的可变类型与不可变类型相关推荐

  1. python中long类型_浅谈python 四种数值类型(int,long,float,complex)

    Python支持四种不同的数值类型,包括int(整数)long(长整数)float(浮点实际值)complex (复数),本文章向码农介绍python 四种数值类型,需要的朋友可以参考一下. 数字数据 ...

  2. python数字类型floatcomplexint_浅谈python 四种数值类型(int,long,float,complex)

    Python支持四种不同的数值类型,包括int(整数)long(长整数)float(浮点实际值)complex (复数),本文章向码农介绍python 四种数值类型,需要的朋友可以参考一下. 数字数据 ...

  3. 硬核!Python 四种变量的代码对象和反汇编分析

    作者 | 大奎 整理 | 阳哥 来源丨Python数据之道 在Python基础的学习过程中,对变量和参数的理解有助于我们从更基础层面了解Python语言的运行.在这个过程中,还是有不少冷门和细节的地方 ...

  4. python四种可变类型_SICP Python 描述 2.4 可变数据

    2.4 可变数据 我们已经看到了抽象在帮助我们应对大型系统的复杂性时如何至关重要.有效的程序整合也需要一些组织原则,指导我们构思程序的概要设计.特别地,我们需要一些策略来帮助我们构建大型系统,使之模块 ...

  5. python 四种逐行读取文件内容的方法

    目录 方法一:readline函数 方法二:一次读取多行数据 方法三:直接for循环 方法四:使用fileinput模块 下面是四种Python逐行读取文件内容的方法, 并分析了各种方法的优缺点及应用 ...

  6. Python四种形式模块的形式与调用

    一.什么是模块? 模块是一系列功能的集合体,而函数是某一个功能的集合体,因此模块可以看成是一堆函数的集合体.一个py文件内部就可以放一堆函数,因此一个py文件就可以看成一个模块.如果这个py文件的文件 ...

  7. [转载] python四种列表的插入方法及其效率

    参考链接: Python list insert() # coding:utf-8 from timeit import timeit def count_append(): lists = [] f ...

  8. python 强类型 弱类型_Python到底是强类型语言还是弱类型语言

    0.前言 有读者跟我讨论起了另一个关于类型的问题,但是,我们很快就出现了重大分歧. 我们主要的分歧就在于:Python 到底是不是强类型语言?我认为是,而他认为不是. 他写了一篇很长的文章<谁告 ...

  9. python四种抽样方法的使用:随机抽样、聚类抽样、系统抽样、分层抽样

    四种抽样方法见下示例代码 示例代码 from sklearn.model_selection import train_test_split import numpy as npdef random_ ...

最新文章

  1. Windows 命令集合
  2. 刚刚更新:在线聊天系统设计(原理+思路+源码+效果图)
  3. 【MaxCompute】学习笔记基础说明
  4. 在eclipse上Checkstyle的安装和使用
  5. mongodb服务部署
  6. 江西小学计算机说课稿,2019江西教师招聘面试-小学数学-说课稿
  7. 设计模式之单例模式(一)
  8. 再说共识性算法Raft
  9. 无源蜂鸣器c语言编程,无源蜂鸣器鸣叫
  10. 两种MBR分区表恢复方法
  11. 网络安全技术第六章——第一节计算机病毒及其防治(中毒表现、计算机病毒概述、计算机病毒分类、病毒传播路径、计算机病故防治建议、我之前写过一篇这个,有需要的可以去看一下)
  12. 计算机内存条能装几个,怎么查看电脑可以插多少内存条
  13. 采购信息记录业务知识简介
  14. java制作小鱼吃大鱼_Java课程设计——大鱼吃小鱼(团队)
  15. 利用Eclipse JDT抽取Java AST
  16. 2015年年终总结学习篇:为了梦想不服输,再苦也不能停止脚步
  17. $('.test:hiden');和$('.test :hiden);区别
  18. 获取钉钉企业部门用户信息
  19. CVPR 2018 论文解读集锦
  20. Linux CentOS6和CentOS7设置静态ip

热门文章

  1. JDK9.0.4环境变量配置
  2. CSS_照片墙例子 相对定位
  3. Vs2012调试本地windows服务
  4. avalon视频学习笔记(六)
  5. preg使用。还是一样,只是个人记录,不放博客园首页
  6. Android通过tcpdump抓包
  7. 【原】让两个DIV高度一样的Javascript函数
  8. 十大经典排序算法1(Python版本)
  9. Python 3.10新增软关键字实现真正意义上的多分支选择结构
  10. 会议通知|2019年全国高校大数据专业教学研讨与教师培训