文字列は結合した結果一緒でも id が別になるのは(たぶん)有名
数値の場合は計算結果が同じ値だったら一緒だったのでそういうものだと思ってたら 256 までだった
整数のみで小数なら 0.5 でも別

a = 10
print(a is (a + 0))
# True

b = 1024
print(b is (b + 0))
# False

c = 256
print(c is (c + 0))
# True

d = 257
print(d is (d + 0))
# False

e = 0.5
print(e is (e + 0))
# False

そういえば前に よく使われる小さい数は最初からオブジェクトの参照を保持していてそれを使う みたいなこと聞いたような気もする

ソースコード中のリテラルは全部同じ id で異なるのは計算した結果 動的に作られた値だけ

a = 1000
b = 1000
c = 1000

d = [2000, 2000, 2000]

print(id(a))
# 1457936

print(id(b))
# 1457936

print(id(c))
# 1457936

for x in d:
print(id(x))

# 1457968
# 1457968
# 1457968