Modify int in place

0 votes

This is more of a curiosity

Say I have the following code

>>> my_immutable = (1, 2)
>>> my_immutable[0] += 1

TypeError: 'tuple' object does not support item assignment

This is expected, because unlike C, Python does not modify the underlying int, but rather creates a new one (observed in the code below)

>>> x = 1
>>> id(x)
33156200
>>> x += 1
>>> id(x)
33156176

If I want to modify the underlying integer in the tuple, I can hackly do something like

>>> hacked_immutable = ([1], [2])
>>> hacked_immutable[0][0] += 1
>>> hacked_immutable
([2], [2])

My question is: is there a nicer way of doing it (ideally performant and ideally already in the standard library)? Some wrapper class around int maybe?

Sep 7, 2018 in Python by bug_seeker
• 15,550 points
120 views

1 answer to this question.

0 votes

Use a list rather than a tuple:

my_container = [1, 2]

tuple is immutable - you can't modify them.

int is immutable - you can't modify them.

The closest you can get is using ctypes to monkeypatch the value. But this is not "nice" by any stretch of the imagination and you will probably segfault your Python runtime if anything else happens to be using that integer.

>>> t = (42, 43)
>>> import ctypes
>>> ctypes.cast(id(42), ctypes.POINTER(ctypes.c_int))[6] = 666
>>> t
(666, 43)
answered Sep 7, 2018 by Priyaj
• 58,140 points

Related Questions In Python

0 votes
1 answer

How to round a floating point number up to certain decimal place in Python?

This is normal (and has nothing to do ...READ MORE

answered Oct 8, 2018 in Python by charlie_brown
• 7,780 points
473 views
+1 vote
10 answers

How to fix this? ValueError: invalid literal for int() with base 10 error in Python

Just for the record: >>> int('55063.000000') Traceback (most recent ...READ MORE

answered Aug 17, 2020 in Python by pakainfo
• 200 points
313,121 views
0 votes
1 answer

Sort a part of a list in place

You can write it as such: a[i:j] = ...READ MORE

answered Feb 12, 2019 in Python by SDeb
• 13,300 points
727 views
0 votes
1 answer

KeyError: "['Place'] not found in axis"

Hi@akhtar, You need to provide the axis parameter ...READ MORE

answered Jun 24, 2020 in Python by MD
• 95,300 points
24,712 views
0 votes
2 answers
+1 vote
2 answers

how can i count the items in a list?

Syntax :            list. count(value) Code: colors = ['red', 'green', ...READ MORE

answered Jul 7, 2019 in Python by Neha
• 330 points

edited Jul 8, 2019 by Kalgi 2,419 views
0 votes
0 answers
+5 votes
6 answers

Lowercase in Python

You can simply the built-in function in ...READ MORE

answered Apr 11, 2018 in Python by hemant
• 5,810 points
1,816 views
0 votes
1 answer

Modify int in place

Use a list rather than a tuple: my_container ...READ MORE

answered Sep 14, 2018 in Python by Priyaj
• 58,140 points
170 views
0 votes
1 answer

What is the meaning of “int(a[::-1])” in Python?

Assumming a is a string. The Slice ...READ MORE

answered Aug 27, 2018 in Python by Priyaj
• 58,140 points
1,561 views