Các -5 đến 256 phạm vi đã làm với các following:
Việc thực hiện giữ một mảng của các đối tượng số nguyên cho tất cả các số nguyên giữa -5 và 256, khi bạn tạo một int
trong phạm vi đó bạn thực sự chỉ lấy lại một tham chiếu đến đối tượng hiện có.
Để chứng minh điều này, hãy chú ý cách id(123)
giữ trở về giá trị như nhau, trong khi id(9999)
có thể trả về giá trị khác nhau:
In [18]: id(123)
Out[18]: 9421736
In [19]: id(123)
Out[19]: 9421736
In [20]: id(9999)
Out[20]: 9708228
In [21]: id(9999)
Out[21]: 10706060
Đây là khóa học một artefact của việc thực hiện hiện hành. Việc triển khai Python khác có thể không thực hiện điều đó hoặc có thể sử dụng một phạm vi khác.
Đối với ví dụ cuối cùng của bạn:
In [14]: a=[999999, 2, 3]
In [15]: b=a[:]
In [16]: map(id, a)
Out[16]: [10908252, 9421180, 9421168]
In [17]: map(id, b)
Out[17]: [10908252, 9421180, 9421168]
Như bạn thấy, [:]
chỉ đơn giản là sao chép tài liệu tham khảo. Điều này giải thích lý do tại sao a[i] is b[i]
đánh giá là True
cho tất cả i
.
Tôi nghĩ bạn đang nhầm lẫn hai điều lạ: 1) 'b = a [:]' sao chép tham chiếu đến tất cả các số nguyên, do đó, 'b [0]' trỏ tới cùng một int như 'a [0]' và 'a [0] là b [0]' trả về 'True'. 2) refs đến các số -5 đến 256 được giữ ở tất cả các lần. – Shep