Python 在 heap 中分配的对象分成两类:可变对象和不可变对象。所谓可变对象是指,对象的内容是可变的,例如 list。而不可变的对象则相反,表示其内容不可变。

  • 不可变对象:int,string,float,tuple
  • 可变对象 :list,dictionary

1. 不可变对象

由于 Python 中的变量存放的是对象引用(reference),所以对于不可变对象而言,尽管对象本身不可变,但变量的对象引用是可变的(相当于 C 语言中指向常量的指针,指针可以指向新的内存空间,但之前指向的常量不可改变)。运用这样的机制,有时候会让人产生糊涂,似乎可变对象变化了。如下面的代码:

由上可知, 不可变的对象的特征没有变,依然是不可变对象,变的只是创建了新对象,改变了变量的对象引用,指向新的不可变对象。作如下验证:

>> a = 1
>> id(a)
30310136L>> b = 1
>> id(b)
30310136L# 也即因为 a,b 都指向的是不可变对象,python 解释器就不再开辟新的内存空间,a、b 共同指向同一个不可变对象;>> a += 1
>> id(a)
30310112L# a 指向了另外的内容>> id(b)
30310136L

2. 可变对象

其对象的内容是可以变化的。当对象的内容发生变化时,变量的对象引用是不会变化的(直接上原始内存空间处进行修改)。如下面的例子。

>> m = [5, 9]
>> id(m)
155821128L>> m += [6]
>> id(m)
155821128L

Python基础:Python可变对象和不可变对象

可变对象 vs 不可变对象(Python)相关推荐

  1. python哪些是可变对象_什么是Python可变对象和不可变对象

    什么是Python可变对象和不可变对象 发布时间:2020-07-22 09:59:15 来源:亿速云 阅读:60 作者:Leah 这篇文章运用简单易懂的例子给大家介绍什么是Python可变对象和不可 ...

  2. python基础教程:对可变对象和不可变对象的详解

    数据类型分为可变.不可变.可变对象表示可以原处修改该数据对象,不可变对象表示必须创建新对象来保存修改后的数据. 在基础数据类型中: 数值.字符串.元组.frozenset是不可变对象 列表.set.d ...

  3. python的可变对象和不可变对象

    说明 在python中处处皆对象,那么具体细分又可以分为可变类型和不可变类型对象,今天来详细讨论一下. is 和 == 的区别 先提前说一下is和==的区别以帮助理解. is是判断两者是否属于同一内存 ...

  4. python中、变量指向的对象可以发生变化吗_python中的引用传递,可变对象,不可变对象,list注意点...

    python中的引用传递 首先必须理解的是,python中一切的传递都是引用(地址),无论是赋值还是函数调用,不存在值传递. 可变对象和不可变对象 python变量保存的是对象的引用,这个引用指向堆内 ...

  5. python可变对象 不可变对象_【Python】可变对象和不可变对象

    在 Python 中一切都可以看作为对象.每个对象都有各自的 id, type 和 value. id: 当一个对象被创建后,它的 id 就不会在改变,这里的 id 其实就是对象在内存中的地址,可以使 ...

  6. python可变对象与不可变对象_python 可变对象与不可变对象

    一.原理 可变对象:list dict set 不可变对象:tuple string int float bool 1. python不允许程序员选择采用传值还是传引用.Python参数传递采用的肯定 ...

  7. python中不可变对象_Python中的可变对象与不可变对象、浅拷贝与深拷贝

    Python中的对象分为可变与不可变,有必要了解一下,这会影响到python对象的赋值与拷贝.而拷贝也有深浅之别. 不可变对象 简单说就是某个对象存放在内存中,这块内存中的值是不能改变的,变量指向这块 ...

  8. python哪些是可变对象_python 中的可变对象与不可变对象

    近日辞职待工,没有实际的项目与大家分享.暂写写在实际运用python中遇到的关于可变对象和不可变对象的坑. 首先我们需要明确一个概念,在python中一且皆对象.我们一般定义一个变量a=0,其实质a是 ...

  9. Python小工具:将对象转换为不可变类型并计算其哈希值

    在设计单元测试时,我们往往需要将运行结果与预期结果相比较.但是,如果运行结果是一个比较复杂的数据结构的话,那么我们可能需要将预期结果硬编码到代码中,或存储到文件中,都需要占用一定的空间.为了减少单元测 ...

最新文章

  1. 取存储过程output的取
  2. iOS布局-autoresizingMask
  3. 【Android 热修复】运行 Tinker 官方示例 ( 处理 TINKER_ID 问题 | 编译 debug 包 | 修改 Gradle 脚本 | 生成 patch 包 | 热修复 )
  4. PMBOK(第六版) PMP笔记——《十一》第十一章(项目风险管理)
  5. 技术宝典 | 基于标准 WebRTC 低延迟直播的开源实践
  6. 【Linux】一步一步学Linux——tty命令(240)
  7. 创建一个dynamics CRM workflow (二) - Build in Workflows
  8. BeetleX之Web网关1.5.7安装使用
  9. 隐私安全保护再升级!苹果强制要求APP必须有删除账号功能
  10. ARCH与GARCH模型
  11. 使用运动探测器和训练有素的DNN检测害虫
  12. PTA练习4-11 统计素数并求和
  13. fullcalendar日历控件知识点集合
  14. 计算机桌面搜狗输入图标不见了怎么办,win7搜狗输入法不见了怎么办
  15. 使用console配置线连接真机路由器
  16. 设置Chrome新标签页为自定义地址页面
  17. 深度学习之鸡兔同笼问题
  18. 如何注册@live.com的邮箱
  19. 短波信道模型--多径瑞利信道原理详解及matlab实现
  20. 2345浏览器卸载之后如何找回收藏夹中的内容?

热门文章

  1. 【java学习之路】(javaWeb篇)006.构造函数、JQuery函数库
  2. mysql和hdfs性能对比,Hadoop vs Spark性能对比 -数据库-火龙果软件工程
  3. Spark DataFrameRDD案例实现
  4. socket简介和udp网络程序-发送、接收数据
  5. Python 之 变量进阶(理解)
  6. 怎样设置计算机默认字体及语言,电脑win10系统怎么将paint 3D的语言设置为中文...
  7. python set_Python的set集合详解
  8. 极限编程 Extreme Programming (中英文对照)图形解释
  9. 图像相似度算法--SIFT算法详解
  10. 多线程+链表模拟RR调度算法