Python immutable and mutable

主要内容转载自他人csdn博客
知识点:python中,万物皆对象。python中不存在所谓的传值调用,一切传递的都是对象的引用,也可以认为是传址。

一、可变对象和不可变对象

Python在heap中分配的对象分成两类:可变对象和不可变对象。所谓可变对象是指,对象的内容可变,而不可变对象是指对象内容不可变。
不可变(immutable):int、字符串(string)、float、(数值型number)、元组(tuple)
可变(mutable):字典型(dictionary)、列表型(list)
e.g:

>>> i=73
>>> a=i
>>> i+=2
>>> i
75
>>> a
73
20140902164438953.png

如图所示,当i+=2时,不可变对象的特征没有变,变的只是创建了新对象,改变了变量的对象引用。同理我们创建新的变量a指向i时,它也创建了自己的新对象,所以不受l的修改而修改


再举一个可变对象的例子
e.g.:

>>> m=[5,9]
>>> a=m
>>> a
[5, 9]
>>> m.append(6)
>>> m
[5, 9, 6]
>>> a
[5, 9, 6]
20140902165215796.png

这里我们对list m做了修改,因为list为可变对象,所以它没有创建新对象和改变对象引用,它只是修改了引用对象。同时我们让一个新变量a指向m,因为m的引用对象发生了改变,所以a的引用对象也发生了改变。


这里注意区分两种可变不可变

immutable and mutable指的是上面的讲解,而有时候说list可变而tuple不可变指的是tuple一旦初始化就不能修改,它没有像list一样的append(),insert()这样的方法。

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

推荐阅读更多精彩内容

  • 个人笔记,方便自己查阅使用 Py.LangSpec.Contents Refs Built-in Closure ...
    freenik阅读 67,819评论 0 5
  • http://python.jobbole.com/85231/ 关于专业技能写完项目接着写写一名3年工作经验的J...
    燕京博士阅读 12,223评论 1 118
  • 一、python 变量和数据类型 1.整数 Python可以处理任意大小的整数,当然包括负整数,在Python程序...
    绩重KF阅读 5,795评论 0 1
  • 最近在慕课网学习廖雪峰老师的Python进阶课程,做笔记总结一下重点。 基本变量及其类型 变量 在Python中,...
    victorsungo阅读 5,743评论 0 5
  • 茹萍最近疯狂地迷上了购物。 不是淘宝天猫京东,而是实体店,尽管现在每天都累得像狗一样,可是只要有一点点闲暇功夫,如...
    时时糖果雨阅读 2,688评论 0 1