Thắc mắc về update Dict trong Python

Mình có đoạn code như sau :slight_smile:

from datetime import datetime, timedelta
encoded_jwt = {
       
        "name_job":"HLS Stream",
        "re_new":True,
        "target_format":"HLS",
        
      
     } 
refresh_jwt=encoded_jwt
print(encoded_jwt)
print(refresh_jwt)
encoded_jwt.update({
"iat":datetime.utcnow(),
"exp":datetime.utcnow()+ timedelta(seconds=30)})
print(encoded_jwt)
print(refresh_jwt)

Đây là kết quả khi chạy :

{'name_job': 'HLS Stream', 're_new': True, 'target_format': 'HLS'}
{'name_job': 'HLS Stream', 're_new': True, 'target_format': 'HLS'}
{'name_job': 'HLS Stream', 're_new': True, 'target_format': 'HLS', 'iat': datetime.datetime(2023, 9, 9, 11, 4, 20, 428954), 'exp': datetime.datetime(2023, 9, 9, 11, 4, 50, 428956)}
{'name_job': 'HLS Stream', 're_new': True, 'target_format': 'HLS', 'iat': datetime.datetime(2023, 9, 9, 11, 4, 20, 428954), 'exp': datetime.datetime(2023, 9, 9, 11, 4, 50, 428956)}


** Process exited - Return Code: 0 **
Press Enter to exit terminal

Các bạn cho mình hỏi chút là sau khi gán encoded_jwt cho refresh_jwt và không update thêm 2 key: iat và exp cho refresh_jwt
Tại sao khi in refresh_jwt ra thì nó có cả 2 key này vậy …
Thanks các bạn !

Trong Python khi gán biến nó khác bên C/C++ đó là nó reference tới chứ nó không copy ra. Do đó, nếu bạn gán a = b thì khi b thay đổi giá trị, khi truy cập a, giá trị nó cũng được cập nhật theo. Hay nói cách khác, a cũng chỉ là một tên khác của b.

4 Likes

Thanks bạn …Làm mình cứ loay hoay mãi
Mình vừa search Google !
Thì ra là phải vầy thì ms đc :slight_smile:

>>> a = {1:2}
>>> b = a.copy()
>>> b
{1: 2}
>>> b[3] = 4
>>> a
{1: 2}
>>> b
{1: 2, 3: 4}
>>> 
2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?