5 ms·
You can't replace a value in a tuple, but you can modify it, e.g., >>> x = (1, 2, [3]) >>> x (1, 2, [3]) >>> x[2].append(4) >>> x (1, 2, [3, 4])
by shoyer 10y ago
You can't replace a value in a tuple, but you can modify it, e.g.,
>>> x = (1, 2, [3])
>>> x
(1, 2, [3])
>>> x[2].append(4)
>>> x
(1, 2, [3, 4])
- nemothekid 10y agoYou haven't changed anything about the tuple. The holds a reference to a list and will always hold a reference to that list. What you did was modify the underlying list, the tuple itself is immutable.
- kilink 10y ago...Or can you? import ctypes def tuple_setitem(t, index, item): obj = ctypes.py_object(t) item = ctypes.py_object(item) ref_count = ctypes.c_long.from_address(id(t)) original_count = ref_count.value if original_count != 1: ref_count.value = 1 ctypes.pythonapi.Py_IncRef(item) ctypes.pythonapi.PyTuple_SetItem(obj, ctypes.c_ssize_t(index), item) ref_count.value = original_count >>> x = (1, 2, 3,) >>> tuple_setitem(x, 1, "foo") >>> x (1, "foo", 3) Disclaimer: for entertainment purposes only, do not try this at home!
- pdonis 10y ago> You can't replace a value in a tuple, but you can modify it If it has mutable items in it, yes. But in that case, the tuple can't be used as a dictionary key; Python checks, not just that the tuple itself is immutable, but that every object in it is immutable.
- deleted 10y ago[deleted]