Hôm nay tôi biết rằng Python lưu trữ các biểu hiện {}
, và thay thế nó bằng một dict trống mới khi nó được gán cho một biến:hành vi kỳ lạ liên quan đến bộ nhớ đệm rõ ràng của "{}"
print id({})
# 40357936
print id({})
# 40357936
x = {}
print id(x)
# 40357936
print id({})
# 40356432
Tôi có không nhìn vào mã nguồn, nhưng tôi có một ý tưởng về cách thực hiện điều này. (Có lẽ khi đếm tham chiếu đến toàn cầu {}
được tăng lên, toàn cầu {}
được thay thế.)
Nhưng xem xét bit này:
def f(x):
x['a'] = 1
print(id(x), x)
print(id(x))
# 34076544
f({})
# (34076544, {'a': 1})
print(id({}), {})
# (34076544, {})
print(id({}))
# 34076544
f
đổi dict toàn cầu mà không gây ra nó phải được thay thế, và nó in ra các dict sửa đổi. Nhưng bên ngoài của f
, mặc dù id là như nhau, các dict toàn cầu bây giờ là sản phẩm nào!
Điều gì đang xảy ra ??
bạn cũng có thể quan tâm đến điều đó: http://stackoverflow.com/questions/15315096/why-the-id-of-an-object-would-change-depending-on-the-line-in-the -python-shell/15321863 # 15321863 – User
Trường hợp cạnh rất mát mẻ, cảm ơn bạn đã chia sẻ. – dimo414
'id()' của Python sử dụng một địa chỉ bộ nhớ (ít nhất là việc triển khai CPython) làm ID cho các đối tượng. Đó là một số nhận dạng duy nhất chỉ tại một thời điểm duy nhất, không phải là duy nhất trong toàn bộ thời gian của chương trình của bạn. Điều này rõ ràng trong tài liệu: http://docs.python.org/2/library/functions.html#id –