Tuple trouble
Tuples are immutable objects, they cannot be changed says the Python manual.
my_tuple = (1, 2, 3, [4, 5, 6])
# this works
my_tuple[3][2] = 7
# clearly the item at index 3 in the tuple has changed
print(my_tuple) # (1, 2, 3, [4, 5, 7])
Lardmeister
Posting Virtuoso
1,749 posts since Mar 2007
Reputation Points: 407
Solved Threads: 44
Lists are passed by reference, so the tuple contains the memory address of the list, not the list itself, and that doesn't change. Both of these statements will fail
my_tuple = (1, 2, 3, [4, 5, 6])
new_list = [4, 5, 6]
my_tuple[3] = new_list ## new memory address
my_tuple[1] = "a"
woooee
Nearly a Posting Maven
2,454 posts since Dec 2006
Reputation Points: 777
Solved Threads: 714
You are changing list, not tuple
>>> my_tuple
(1, 2, 3, [4, 5, 6])
>>> type(my_tuple[3])
<class 'list'>
>>> id(my_tuple[3])
14727328
>>> my_tuple[3][2]=7
>>> id(my_tuple[3])
14727328
pyTony
pyMod
5,359 posts since Apr 2010
Reputation Points: 782
Solved Threads: 852
Well, you are on to something, the tuple has changed. However, the id() of the whole tuple is still the same after the change.
My advice, don't rely blindly on tuples not changing as advertised.
vegaseat
DaniWeb's Hypocrite
5,989 posts since Oct 2004
Reputation Points: 1,345
Solved Threads: 1,417