Почему python не позволяет интернировать кортежи?

Одним из преимуществ неизменности является эффективность использования памяти. Например

>>> a = "abcd"
>>> b = "abcd"
>>> a is b
True
>>> a = 1
>>> b = 1
>>> a is b
True

Однако для кортежей кажется, что python никогда не пытается делать то же самое. Интересно, почему?

>>> a = (1, 2)
>>> b = (1, 2)
>>> a is b
False

person Keeto    schedule 15.04.2018    source источник
comment
Он также не пытается сделать то же самое для всех целых чисел или всех строк.   -  person user2357112 supports Monica    schedule 15.04.2018
comment
Вы можете использовать == pyfiddle.io/fiddle/26c865d8-770e-4e80-9509 -4f386e6c7893   -  person raul.vila    schedule 15.04.2018
comment
Такое интернирование имеет свою стоимость, а именно память, необходимую для хранения объектов, и накладные расходы на обнаружение повторяющихся использований. Небольшие целые числа и короткие строки достаточно распространены, чтобы сделать это стоящим; кортежи нет.   -  person chepner    schedule 15.04.2018
comment
@user2357112 user2357112 в некоторых случаях я понимаю, но я имел в виду, что он никогда не пытается интернировать кортежи. Мне было интересно, есть ли какие-то конструктивные причины для этого   -  person Keeto    schedule 15.04.2018
comment
Кроме того, кортежи неизменяемы; их содержимое может и не быть. Являются ли x = ([1], 2) и y = ([1], 2) одним и тем же кортежем? А что после y[0].append('a')? Хуже того, изменяемая часть кортежа может быть вложена сколь угодно глубоко; сколько времени вы хотите потратить на определение того, является ли кортеж полностью неизменным, чтобы его можно было интернировать?   -  person chepner    schedule 15.04.2018
comment
@chepner да, спасибо за понимание   -  person Keeto    schedule 15.04.2018
comment
@vaultah Интересно. Похоже, это не сработало на моей машине. Ни для python2, ни для 3   -  person Keeto    schedule 15.04.2018