1.11M Members

Tuple trouble

 
0
 

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])
 
0
 

Think about the words though. Did you change the tuple? Or did you change the item at index of?

 
1
 

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"
 
0
 

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
 
1
 

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.

Question Answered as of 3 Years Ago by vegaseat, woooee, predator78 and 1 other
Isn't it about time forums rewarded their contributors?

Earn rewards points for helping others. Gain kudos. Cash out. Get better answers yourself.

It's as simple as contributing editorial or replying to discussions labeled or OP Kudos

You
This question has already been solved: Start a new discussion instead
Post:
Start New Discussion
View similar articles that have also been tagged: