Are Tuples In Python Immutable?
Solution 1:
Yes, tuples are immutable; once created, they cannot be changed. t1=t1+(7,1)
creates a new tuple and assigns it to the name t1
. It does not change the tuple object originally referenced by that name.
Demo:
>>>t = (1, 2, 3)>>>id(t)
4365928632
>>>t = t + (4, 5)>>>id(t)
4354884624 # different id, different object
Solution 2:
yes they are immutable
t1 = t1 + (7,1)
Is creating a new tuple ... not modifying the old one
try
t1[0] = 5
Solution 3:
Basically when you call t1=t1+(7,1)
, you are reassigningt1
to a different memory location. What python means by immutable, is that you can't change them by slicing:
>>> 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
>>>
Because this creates a new tuple:
>>>t1=(4,5,8,2,3)>>>id(t1)
4467745808
>>>t1 = t1+(9,)>>>id(t1)
4468302112
>>>
As you can see with lists, they keep the id
:
>>>lst = [4, 5, 8, 2, 3]>>>id(lst)
4468230480
>>>lst[0] = 6>>>id(lst)
4468230480
>>>
That is python's definition of immutability.
Solution 4:
I can't say Yes. Python tuples have a surprising trait: they are immutable, but their values may change. This may happen when a tuple holds a ref. to any mutable object, such as a dict, list...
>>> t1 = ('Bangalore', ['HSR', 'Koramangala'])
>>> print(t1)
('Bangalore', ['HSR', 'Koramangala'])
>>> print(id(t1)) # ID of tuple4619850952>>> 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 tuple4619850952>>> print(t1[0])
Bangalore
>>> print(id(t1[0])) # ID of tuple's first element4641176176>>> 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 object4639158024
In the above example the id's of tuple and list didn't change. This is happening due to reference which is mapped to the tuple not the value.
Post a Comment for "Are Tuples In Python Immutable?"