voila
voila

Reputation: 182

Item assignment to tuples

I am trying to change the value of a particular element of a tuple of tuples. Here is the code:

y=((2,2),(3,3))
y[1][1]=999
print('y: ',y)

TypeError: 'tuple' object does not support item assignment

I understand that Tuples are immutable objects. “Immutable” means you cannot change the values inside a tuple. You can only remove them. I was wondering if there is a workaround? I cannot create a list of lists for y because I am using y as a key in a dictionary later.

Upvotes: 0

Views: 880

Answers (3)

mackostya
mackostya

Reputation: 141

The workaround would be to convert it to the list, make changes, and then convert to the tuple again, if you need to use the tuple later as a key to a dictionary. There is no way to directly change the values.

y=((2,2),(3,3))
y = list(y)
for i in range(len(y)):
    y[i] = list(y[i])

y[1][1] = 999

for i in range(len(y)):
    y[i] = tuple(y[i])
y = tuple(y)

print('y: ',y)

Upvotes: 1

Nick
Nick

Reputation: 147146

If you don't expect the modified value of y to point to the same dictionary entry, you could convert to a list of lists, modify that and then convert back to tuples. For example:

d = { ((2,2),(3,3)) : 'old', ((2, 2), (3, 999)) : 'new' }
y = ((2,2),(3,3))
print(d[y])
z = list(list(a) for a in y)
z[1][1] = 999
y = tuple(tuple(a) for a in z)
print(d[y])

Output:

old
new

Upvotes: 2

Blue Robin
Blue Robin

Reputation: 1106

You can't change the values of tuples because they are constant. But, you can convert it back to a list to be changed.

Code:

x=((2,2),(3,3))
y = list(x)
print(y)
for i in range(len(y)):
    y[i] = list(x[i])
y[1][1]=999
print(y)

Upvotes: 0

Related Questions