当前位置:   article > 正文

序列类型之元组(可变与不可变)_元组的元素可以是可变类型吗

元组的元素可以是可变类型吗

在进入今天的主题之前,首先,我们需要先对元组有一个基础的了解。

元组(tuple)是序列类型中比较特殊的类型。

  • 元组一旦创建就不能被修改。
  • 常用情况:元组类型在表达固定数据项、函数多返回值、多变量同步赋值、循环遍历。
  • Python中元组采用逗号和圆括号(可选)来表示,其中,逗号 “ , ”是必须的。
>>> creature = "cat","dog","tiger"
>>> type(creature)
<class 'tuple'>
>>> creature1 = ("cat","dog","tiger")
>>> type(creature1)
<class 'tuple'>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

➢ 序列类型的12个通用函数和操作符

操作符描述说明
x in s如果x是序列s中的元素,则返回True,否则返回False
x not in s如果x不是序列s中的元素,则返回True,否则返回False
x + y连接序列x和y
s * n 或 n * s将序列x复制n次
s[i]索引,返回序列的第i个元素
s[i:j]分片,返回包含序列s第i个到第j - 1个元素的子序列
s[i:j:k]步骤分片,返回包含序列s第i个到第k - 1个元素,以j为跳度的子序列
len(s)返回序列s的元素个数,即长度
min(s)返回序列s中的最小元素
max(s)返回序列s中的最大元素
s.index(x[,i[,j]])序列s中从i开始到j结束的范围中第一次出现元素x的位置
s.count(x)序列s中x出现的总次数

在上面,我们就提到了元组一旦创建就不能再修改。但我们来看一下下面这段代码。

>>> some_tuple = ([1],2,3)
>>> some_tuple[0] += [2]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> some_tuple
([1, 2], 2, 3)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

没错,我们可以看到程序虽然抛出异常,但元组的确是通过“ += ”被修改了。

“+=”是本地操作,会将“可变对象”进行原地修改,而tuple中 += 是两个过程,即A+=B其实就等价于A=A+B,先 + 再 =,所以+操作时就已经已经修改了原对象,但是再次赋值就触犯了元组不能修改的规则,是以抛出异常。

  • +=, -=, =, /=, //=, %=, *=, <<=, >>=, &=, ^=, |=这些操作符都是原地修改可变对象,不会改变对象,即是此变量创立的存储地址(id)不会被改变。

➢数字、元组、字符串都是不可变对象。

>>> s = [1,2,3,4]
>>> id(s)
2473956988936
>>> s += [5]
>>> print(s)
[1, 2, 3, 4, 5]
>>> id(s)
2473956988936
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

但通过下面这种方式可以对元组进行一定的修改。

>>> b = some_tuple[0]
>>> id(b)
2473986685704
>>> b += [3]
>>> id(b)
2473986685704
>>> b
[1, 2, 3]
>>> some_tuple
([1, 2, 3], 2, 3)
>>> id(some_tuple[0])
2473986685704
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

从上面可以看出,tuple不支持=这种赋值操作,但是对其中可变元素的原地修改是可以的。
➢所以,在此,发表一下自己浅显的认识:元组(tuple)的不可变,一是指元素对象的引用不可变,二是指不能对其再次赋值,但是在其中可变元素对象的引用不被修改的前提下,仍旧可以在此地址下对可变元素对象进行修改。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/305603
推荐阅读
相关标签
  

闽ICP备14008679号