它说:
一旦创建元组,就无法以任何方式更改。
但是当我执行以下操作时:
t1=(4,5,8,2,3)
t1=t1+(7,1)
print(t1)
元组正在更改为(4, 5, 8, 2, 3, 7, 1)
; 为什么会这样?"元组是不可变的"真正意味着什么?
它说:
一旦创建元组,就无法以任何方式更改。
但是当我执行以下操作时:
t1=(4,5,8,2,3)
t1=t1+(7,1)
print(t1)
元组正在更改为(4, 5, 8, 2, 3, 7, 1)
; 为什么会这样?"元组是不可变的"真正意味着什么?
是的,元组是不可变的;一旦创建,就不能更改。 t1=t1+(7,1)
创建一个新元组并将其赋值给名称t1
。它不会更改最初由该名称引用的元组对象。
演示:
>>> t = (1, 2, 3)
>>> id(t)
4365928632
>>> t = t + (4, 5)
>>> id(t)
4354884624 # different id, different object
是的,它们是不可变的。
t1 = t1 + (7,1)
创建一个新元组而不是修改旧元组是否可行?
请尝试。
t1[0] = 5
当你调用t1=t1+(7,1)
时,你正在重新分配t1
到另一个内存位置。Python所说的不可变是指你不能通过切片来改变它们:
>>> t1=(4,5,8,2,3)
>>> t1[0] = 9
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>>
因为这会创建一个新的元组:
>>> t1=(4,5,8,2,3)
>>> id(t1)
4467745808
>>> t1 = t1+(9,)
>>> id(t1)
4468302112
>>>
正如您在列表中所看到的,它们会保留id
:
>>> lst = [4, 5, 8, 2, 3]
>>> id(lst)
4468230480
>>> lst[0] = 6
>>> id(lst)
4468230480
>>>
我不得不说“No”。
Python元组有一个让人惊讶的特性:它们是不可变的,但它们的值可能会改变。这可能发生在一个元组持有对任何可变对象(如字典、列表等)的引用时...>>> t1 = ('Bangalore', ['HSR', 'Koramangala'])
>>> print(t1)
('Bangalore', ['HSR', 'Koramangala'])
>>> print(id(t1)) # ID of tuple
4619850952
>>> place = t1[1]
>>> place.append('Silk Board') # Adding new value to the list
>>> print(t1)
('Bangalore', ['HSR', 'Koramangala', 'Silk Board'])
# Surprisingly tuple changed, let's check the ID
>>> print(id(t1)) # No change in the ID of tuple
4619850952
>>> print(t1[0])
Bangalore
>>> print(id(t1[0])) # ID of tuple's first element
4641176176
>>> print(id(t1[1])) # ID of tuple's second element (List)
4639158024
# These are the ref. id's of the tuple
>>> place.append('Agara')
>>> print(t1)
('Bangalore', ['HSR', 'Koramangala', 'Silk Board', 'Agara'])
>>> print(id(t1))
4619850952
# Still no change, are they Immutable ??
>>> print(id(t1[1])) # The tuple having a ref. of Mutable object
4639158024
t=2; t=t+5
不是将数字2变成7,而是创建一个新的数字;-) - Daniel