python不可变性和可变性的区别

Python中的元组是一种类似于列表的容器类型,但列表是可变的而元组不可变。
元组本身是不可变的,但是它所包含的元素的可变性取决于该元素的属性。

如:t = (17, 'Jesse', ('LinuxKernel', 'Python'), [17, 'Jesse'])
元组t中的元素数字17和字符串‘Jesse’以及元组('LinuxKernel', 'Python')本身属于不可变元素,故其在元组中不可更新;但是其中包含的列表[17, 'Jesse']本身属于可变元素,故:

>>> t = (17, 'Jesse', ('LinuxKernel', 'Python'), [17, 'Jesse'])
>>> t
(17, 'Jesse', ('LinuxKernel', 'Python'), [17, 'Jesse'])
>>> t[0] = 18
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> t[3]
[17, 'Jesse']
>>> t[3][0] = 21
>>> t
(17, 'Jesse', ('LinuxKernel', 'Python'), [21, 'Jesse'])

由于元组的不可变性,所以它也没有列表的一些能改变自身的方法,如sort或reverse等(元组中的元素根据其本身属性可能有)。
列表的一些属性和方法:
>>> dir(list)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

元组的一些属性和方法:
>>> dir(tuple)
['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index']

通过比较两者的属性和方法,可以验证上一结论。

虽然列表与元组有些不同,但是它们还是有很多相似的地方:
1. 创建方法类似:
创建一个列表:l = [123, 'abc' , (1, 2, 3)]
创建一个元组:t = (123, 'abc', (1, 2, 3))

2. 都支持下标操作:
>>> l[1]
'abc'
>>> t[1]
'abc'

3. 都支持切片操作:
>>> l[0:-1]
[123, 'abc']
>>> t[0:-1]
(123, 'abc')

4. 支持重复操作:
>>> l * 2
[123, 'abc', (1, 2, 3), 123, 'abc', (1, 2, 3)]
>>> t * 2
(123, 'abc', (1, 2, 3), 123, 'abc', (1, 2, 3))

5. 支持连接操作(当然只能由同类型连接):
>>> l + [3, 7, 6]
[123, 'abc', (1, 2, 3), 3, 7, 6]
>>> t + (3, 7, 6)
(123, 'abc', (1, 2, 3), 3, 7, 6)

6. 还有拷贝,比较,成员关系操作等等
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值