元组也不是那么“不可变”

来源:互联网 发布:nginx ssl 编辑:程序博客网 时间:2024/05/21 06:45

6.18.2 元组也不是那么“不可变”
虽然元组是被定义成不可变的,但这并不影响它的灵活性。元组并不像我们想的那么不可
变,这是什么意思?其实元组几个特定的行为让它看起来并不像我们先前声称的那么不可变.
比如说,既然我们可以把字符串组合在一起形成一个大字符串。那么把元组组合在一起形
成一个大的元组也没什么不对,所以,连接操作可用,这个操作一点都没有改变那些小元组。
我们所作的是把它们的元素结合在一起.这里有几个例子:

s = ‘first’
s = s + ’ second’
s
‘first second’

t = (‘third’, ‘fourth’)
t
(‘third’, ‘fourth’)

t = t + (‘fifth’, ‘sixth’)
t
(‘third’, ‘fourth’, ‘fifth’, ‘sixth’)
同样的概念也适用于重复操作。重复操作只不过是多次复制同样的元素,再有,我们前面
提到过可以用一个简单的函数调用把一个元组变成一个可变的列表。我们的最后一个特性可能
会吓到你。你可以“修改”特定的元组元素,哇!这意味着什么?
虽然元组对象本身是不可变的,但这并不意味着元组包含的可变对象也不可变了。
t = ([‘xyz’, 123], 23, -103.4)
t
([‘xyz’, 123], 23, -103.4)
t[0][1]
123
t[0][1] = [‘abc’, ‘def’]
t
Edit By Vheavens
Edit By Vheavens                              
([‘xyz’, [‘abc’, ‘def’]], 23, -103.4)
在上面的例子中,虽然 t 是一个元组类型变量,但是我们设法通过替换它的第一个元素(一
个列表对象)的项来“改变”了它。我们替换了 t[0][1],原来是个整数,我们把它替换成了一
个列表对象 [‘abc’,’def’].虽然我们只是改变了一个可变对象,但在某种意义上讲,我们也“改
变”了我们的元组类型变量。

0 0