Dict trong python
mình mới tập tành học lập trình python, mọi người cho mình hỏi đoạn code sau nha:
dict1 = {‘Ten’: ‘Nam’, ‘Tuoi’: 7}
print dict1
a = dict1
a [‘Ten’] = “bill”
print a
print dict1
Output:
{‘Tuoi’: 7, ‘Ten’: ‘Nam’}
{‘Tuoi’: 7, ‘Ten’: ‘bill’}
{‘Tuoi’: 7, ‘Ten’: ‘bill’}
tại sao khi gán a = dict1 và thay đổi key “Ten” thì key “Ten” của dict1 cũng thay đổi theo vậy.
Như theo kết quả thì khi ta cho a = dict1, giống như là tạo một name khác cho dict1 vậy và cũng trỏ về nơi chứa kết quả của dict1 (giống softlink trong linux). Cách gán này có tác dụng gì khi lập trình, khác gì với khi gán bình thường. Cảm ơn mọi người
Trong Python, tất cả các phép gán thông thường đều đơn thuần chỉ là tạo thêm một reference cho một object ban đầu. Hiểu nôm na là tạo “nickname” cho một object hay từa tựa “pointer” trong C/C++ vậy.
Dù có bao nhiêu tên đi chăng nữa thì nó cũng chỉ đến một object duy nhất.
Về phần tác dụng, theo mình thì ưu điểm của nó là tránh việc phải tạo ra các bản copy của object một cách không cần thiết.
ah thanks bạn nha, nhưng thế này thì sao:
output: 1
==> trong trường hợp này a vẫn bằng 1 mà ko phải là 2 như b. Khác gì so với trường hợp trên vậy.
cái đó là
Khởi tạo 1 đối tượng kiểu số nguyên, giá trị là 1, gán vào biến a
Gán biến b vào đối tượng số nguyên đó, nên b có giá trị là 1
Khởi tạo 1 đối tượng kiểu số nguyên, giá trị là 2, gán vào biến b
Nên b có giá trị là 2, kiểu như bạn đặt tên vậy đó, bạn có 1 ngôi nhà, bạn đặt tên nhà đó là a, xong 1 người khác đặt tên cho cũng ngôi nhà đó là b (1 ngôi nhà có 2 tên), xong người đó chán, đổi tên b cho ngôi nhà khác.
Còn trường hợp dict thì bạn đặt tên ngôi nhà đó là dict1, 1 người khác đặt tên ngôi nhà đó là a, rồi bạn gọi điện cho 1 công ty sơn nào đó: “alo đến sơn lại ngôi nhà tên là dict1 thành màu xanh”, xong người kia lại gọi cho công ty sơn: “alo đến sơn lại ngôi nhà tên a thành màu đó”. Vậy là nhà từ màu xanh thành màu đỏ
Để ý là có “ngôi nhà” sơn lại được có cái thì không (immutable and mutable)
Gợi ý tiếp 2 keyword nữa để b nghịch thử là shallow copy and deep copy
Lúc đầu, cả a và b chỉ tới object
1
. Lúc sau, b chỉ tới object2
, trong khi a vẫn chỉ tới object1
.So với đoạn code lúc đầu của bạn thì đoạn code trên đây nó giống thế này hơn này:
Còn đoạn code đầu tiên:
giờ thì hiểu rồi, thanks mọi người nhiều nha