python知识点:可变对象和不可变对象
2017-03-11 11:18
330 查看
python中,对象分为可变(mutable)和不可变(immutable)两种类型。
元组(tuple)、数值型(number){int,float}、字符串(string)均为不可变对象,而字典型(dictionary)和列表型(list)的对象是可变对象。
{我对可变对象的理解就是,变量a将其赋值给另一个变量b,修改这个变量b会直接修改原变量a,而不可变对象,就会复制变量a进行修改,不会修改原变量a;即可变对象引用指向一个,而不可变对象,随着修改,会指向不同的引用}
output:
发现了int,str的指向的值是一样的,那么它们的内存id一致;
值得注意的是tuple虽然都是(1,2),但内存id是不一样的;
output:
可以看到j_int和j_str的id已经改变,不再指向原来id。
output:
参考:
http://www.jianshu.com/p/c5582e23b26c 解释不错
元组(tuple)、数值型(number){int,float}、字符串(string)均为不可变对象,而字典型(dictionary)和列表型(list)的对象是可变对象。
{我对可变对象的理解就是,变量a将其赋值给另一个变量b,修改这个变量b会直接修改原变量a,而不可变对象,就会复制变量a进行修改,不会修改原变量a;即可变对象引用指向一个,而不可变对象,随着修改,会指向不同的引用}
#coding:utf-8; i_int = 10 j_int = 10 k_int = 11 i_str = 'Python' j_str = 'Python' k_str = 'python world' i_tuple = (1,2) j_tuple = (1,2) k_tuple = (1,2,3) print "i_int's id",str(id(i_int)) print "j_int's id",str(id(j_int)) print "k_int's id",str(id(k_int)) print "i_str's id",str(id(i_str)) print "j_str's id",str(id(j_str)) print "k_str's id",str(id(k_str)) print "i_tuple's id",str(id(i_tuple)) print "j_tuple's id",str(id(j_tuple)) print "k_tuple's id",str(id(k_tuple))
output:
i_int's id 30498944 j_int's id 30498944 k_int's id 30498920 i_str's id 140092758495168 j_str's id 140092758495168 k_str's id 140092757760912 i_tuple's id 140092757580688 j_tuple's id 140092757580760 k_tuple's id 140092757698192
发现了int,str的指向的值是一样的,那么它们的内存id一致;
值得注意的是tuple虽然都是(1,2),但内存id是不一样的;
j_int = j_int + 1 j_str = j_str + str("Add something") print "Modified:j_int's id",str(id(j_int)) print "Modified:j_str's id",str(id(j_str))
output:
Modified:j_int's id 30498920 Modified:j_str's id 140092757761304
可以看到j_int和j_str的id已经改变,不再指向原来id。
#immutable tmp = j_int print "tmp's id",str(id(tmp)) tmp = tmp + 1 print "Modified:tmp's id",str(id(tmp)) print "j_int",j_int print "tmp",tmp #mutable dt = {1:'1',2:'2'} d = dt print "dt's id",str(id(dt)) print "d's id",str(id(d)) d[3]='3' print "dt's id",str(id(dt)) print "d's id",str(id(d)) for i in dt.keys(): print "dt's key",i for i in d.keys(): print "d's key",i
output:
tmp's id 30498920 Modified:tmp's id 30498896 j_int 11 tmp 12 dt's id 140092757766224 d's id 140092757766224 dt's id 140092757766224 d's id 140092757766224 dt's key 1 dt's key 2 dt's key 3 d's key 1 d's key 2 d's key 3
参考:
http://www.jianshu.com/p/c5582e23b26c 解释不错
相关文章推荐
- python中的可变对象和不可变对象
- Python学习笔记——可变对象和不可变对象
- Python可变对象v.s.不可变对象,引用
- Python中的可变,不可变对象;值类型,引用类型;浅拷贝,深拷贝理解
- 关于Python参数传递时,传递可变对象(mutable)和不可变更对象(immutable)的误区
- python可变对象和不可变对象
- Python基础(3)_可变对象与不可变对象、列表、元祖和字典
- 关于python的可变和不可变对象
- 【Python】可变对象和不可变对象
- python引用在函数传参时的体现以及可变与不可变对象的对比
- 可变对象 vs 不可变对象(Python)
- python学习之路——函数关于可变对象和不可变对象问题
- Python中可变对象和不可变对象
- python函数参数是值传递还是引用传递:取决于对象内容可变不可变
- python函数参数是值传递还是引用传递(以及变量间复制后是否保持一致):取决于对象内容可变不可变
- Python 可变对象和不可变对象
- python参数传递问题与可变/不可变对象
- Python中的可变对象和不可变对象
- Python中的可变对象和不可变对象
- python不可“用可变对象作默认参数”