đối tượng số nguyên lớn không được tái sử dụng bởi những người thông dịch, vì vậy bạn sẽ có được hai đối tượng riêng biệt:
>>> a = 11111
>>> b = 11111
>>> id(a)
40351656
>>> id(b)
40351704
sys.getrefcount (11111) luôn trả về số tương tự vì nó đo đếm tài liệu tham khảo của một tươi vật.
Đối với số nguyên nhỏ, Python luôn tái sử dụng cùng một đối tượng:
>>> sys.getrefcount(1)
73
Thông thường, bạn sẽ nhận được chỉ có một tham chiếu đến một đối tượng mới:
>>> sys.getrefcount(object())
1
Nhưng số nguyên được phân bổ trong một trước đặc biệt khu vực malloced bởi Python để tối ưu hóa hiệu suất, và tôi nghi ngờ hai tài liệu tham khảo bổ sung có một cái gì đó để làm với điều này.
Bạn có thể nhìn vào việc thực hiện C ở đây: http://svn.python.org/view/python/trunk/Objects/intobject.c?view=markup
Chỉnh sửa: Tôi không yêu cầu bồi thường để hiểu những gì đang xảy ra trong chi tiết lowlevel, tôi nghĩ rằng có một số điều tại nơi làm việc mà bộ nhớ cache tài liệu tham khảo tạm thời:
print sys.getrefcount('foo1111111111111' + 'bar1111111111111') #1
print sys.getrefcount(111111111111 + 2222222222222) #2
print sys.getrefcount('foobar333333333333333333') #3
Mặc dù x = "test" tăng số ref, x = (số lớn) thì không. – kaiseroskilo