2018-03-30

可变与不可变类型


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

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

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


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


结果

可以看到执行 i += 1 时,内存地址都会变化,因为int 类型是不可变的。再改改代码,但多个int类型的变量值相同时,看看它们内存地址是否相同。


结果

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

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,867评论 8 265
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,955评论 18 399
  • 从去年下半年以来,药价好像不再受国家的掌控,由厂家自我定价。直至今日一些药价已经飙升得太不像话,地高辛以前是零售八...
    随心的爱阅读 1,118评论 0 0
  • 写作挑战活动的初衷是让参与者能够激活自己的朋友圈资源。写作是自我梳理,分享是拓展链接,而反馈和互动是提升过程。确定...
    AI学者天蓬阅读 1,170评论 0 0
  • 今天从上午画图,然后做报价。因为第一次做这个报价清单,所以做了好久,做了几个小时。主要就是看报价上的每一项...
    天空蓝上阅读 799评论 0 0