Nhận xét về Làm cách nào để khai báo một biến không sử dụng trong vòng lặp for? (Đã hết kích thước bình luận)
Python duy trì cùng một tham chiếu cho đối tượng được tạo. (bất kể khả năng thay đổi), ví dụ,
In [1]: i = 1
In [2]: j = 1
In [3]: id(i)
Out[3]: 142671248
In [4]: id(j)
Out[4]: 142671248
Bạn có thể thấy cả i và j, tham chiếu đến cùng một đối tượng trong bộ nhớ Điều gì sẽ xảy ra khi chúng ta thay đổi giá trị của một biến bất biến.
In [5]: j = j+1
In [6]: id(i)
Out[6]: 142671248
In [7]: id(j)
Out[7]: 142671236
bạn có thể thấy j bây giờ bắt đầu trỏ đến một vị trí mới, (nơi 2 được lưu trữ), và tôi vẫn trỏ đến vị trí nơi 1 được lưu. Trong khi đánh giá,
j = j+1
Giá trị được chọn từ 142671248, được tính toán (nếu chưa được lưu trong bộ nhớ đệm) và đặt tại vị trí mới 142671236. j được thực hiện để trỏ đến vị trí mới. Nói một cách đơn giản hơn, một bản sao mới được tạo ra mỗi khi một biến bất biến được sửa đổi.
Tính đột biến
Các đối tượng có thể thay đổi hoạt động hơi khác nhau về mặt này. Khi giá trị được trỏ bởi
In [16]: a = []
In [17]: b = a
In [18]: id(a)
Out[18]: 3071546412L
In [19]: id(b)
Out[19]: 3071546412L
Cả a và b đều trỏ đến cùng một vị trí bộ nhớ.
In [20]: a.append(5)
Vị trí bộ nhớ được trỏ bởi a được sửa đổi.
In [21]: a
Out[21]: [5]
In [22]: b
Out[22]: [5]
In [23]: id(a)
Out[23]: 3071546412L
In [24]: id(b)
Out[24]: 3071546412L
Cả a và b, vẫn trỏ đến cùng một vị trí bộ nhớ. Nói cách khác, các biến có thể thay đổi hoạt động tại cùng một vị trí bộ nhớ được trỏ đến bởi biến, thay vì tạo một bản sao của giá trị được trỏ bởi biến, như trong trường hợp biến bất biến.