Python中对列表的可变性进行讨论


   在Python中,一切皆对象,对于对象中的数字,字符串,元组,其是不可变的对象。而对于列表是可变的对象。
   可变与不可变性,是对内存地址而言的。由于Python是解释性语言,因而对于每个对象的赋值都是对内存块的引用,例如 a=2,此时a是2的引用,若这是你修改a=2的表达式,改为a=3,此时a就指向了3这个内存块。
具体程序如下所示:
a = 2
print id(a)
a = 3
print id(a)
输出结果:
31095184
31095160

以上说明,a赋值不同的变量,只是引用不同的内存,不能对内存进行修改。这体现了不可变性。
       对于元组而言,也是属于不可变性,一个元组保存在同一块内存中,属于不可变。
具体代码如下所示:
print('Research on the variability of tuple ')
tuple1 = ("juan", 24, "110")
print tuple1

tuple1[1] = 25
print tuple1
输出结果:
TypeError: 'tuple' object does not support item assignment
以上说明不能对tuple1中的某个元素进行修改。
      对于列表而言,其属于是可变性。具体理解可以根据C语言中的链表类比,对于列表,首地址是不可变的,而对于列表内的所有元素进行修改,会改变单个元素的地址(指向不同的引用)。所以说对于列表中的单个元素而言是不可变的,对于整体列表而言是可变的,如下图所示:
列表操作代码如下所示:
print('Research on the variability of lists') 
list1 = ["juan", 24, "110"]
print list1
print "ID-list1=", id(list1)
print "ID-list1[0]=", id(list1[0])
print "ID-list1[1]=", id(list1[1])


list1[0] = "tao"
list1[1] = 26
print list1
print "ID-list1=", id(list1)
print "ID-list1[0]=", id(list1[0])
print "ID-list1[1]=", id(list1[1])
输出结果:
Research on the variability of lists
['juan', 24, '110']
ID-list1= 38301128
ID-list1[0]= 38951672
ID-list1[1]= 31094656
['tao', 26, '110']
ID-list1= 38301128
ID-list1[0]= 38951872
ID-list1[1]= 31094608

以上只是对这种现象的一种假想,没能进行源码的验证,若有错误,希望给予指正。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值