Thật đơn giản. Điều đầu tiên bạn phải hiểu thiết kế của trình thông dịch Python. Nó không cấp phát bộ nhớ cho tất cả các biến cơ bản nếu có hai hoặc nhiều biến có cùng giá trị nó chỉ ánh xạ tới giá trị đó.
chúng ta hãy đi đến mã ví dụ,
In [6]: a = 10
In [7]: id(a)
Out[7]: 10914656
In [8]: b = 10
In [9]: id(b)
Out[9]: 10914656
In [10]: c = 11
In [11]: id(c)
Out[11]: 10914688
In [12]: d = 21
In [13]: id(d)
Out[13]: 10915008
In [14]: e = 11
In [15]: id(e)
Out[15]: 10914688
In [16]: e = 21
In [17]: id(e)
Out[17]: 10915008
In [18]: e is d
Out[18]: True
In [19]: e = 30
In [20]: id(e)
Out[20]: 10915296
Từ đầu ra ở trên, các biến a và cổ phiếu b bộ nhớ tương tự, c và d có bộ nhớ khác nhau khi tôi tạo ra một biến e mới và lưu trữ một giá trị (11) đã có mặt trong biến c sao cho nó được ánh xạ tới vị trí bộ nhớ đó và không tạo ra bộ nhớ mới khi tôi thay đổi giá trị hiện tại trong biến e đến 21 đã có trong biến d vì vậy bây giờ biến d và e chia sẻ cùng một vị trí bộ nhớ. Cuối cùng, tôi thay đổi giá trị trong biến e thành 30 mà không được lưu trữ trong bất kỳ biến nào khác để nó tạo ra một bộ nhớ mới cho e.
vì vậy bất kỳ biến nào có cùng giá trị chia sẻ bộ nhớ.
Not for list and dictionary objects
hãy đến với câu hỏi của bạn.
khi nhiều khóa có cùng giá trị thì tất cả chia sẻ cùng một bộ nhớ để điều bạn mong đợi đã có trong python.
bạn chỉ có thể sử dụng nó như thế này
In [49]: dictionary = {
...: 'k1':1,
...: 'k2':1,
...: 'k3':2,
...: 'k4':2}
...:
...:
In [50]: id(dictionary['k1'])
Out[50]: 10914368
In [51]: id(dictionary['k2'])
Out[51]: 10914368
In [52]: id(dictionary['k3'])
Out[52]: 10914400
In [53]: id(dictionary['k4'])
Out[53]: 10914400
Từ sản lượng trên, k1 chủ chốt và k2 ánh xạ tới cùng một địa chỉ có nghĩa là giá trị một lưu trữ một lần duy nhất trong bộ nhớ đó là nhiều chìa khóa từ điển giá trị duy nhất đây là điều bạn muốn. : P
Nguồn
2017-09-06 06:00:49
Bạn có nghĩa là bạn muốn truy cập mục nhập đầu tiên với _either_ ''a'' hoặc'' b''? Giống như 'dictionary ['a']' và 'dictionary ['b']' cả hai đều trả về '1'? –
Cũng giống như bạn nói, từ điển ['a'] = 1 và từ điển ['b'] = 1. – GiannisIordanou
@evil_inside, ah, nếu đó là những gì bạn muốn, tại sao bạn không chỉ gán 1 cho cả hai khóa? – senderle