主要内容转载自他人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()这样的方法。
网友评论