亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python強制變量不通過引用傳遞

Python強制變量不通過引用傳遞

DIEA 2023-03-16 10:04:47
當聲明超出范圍時,Python 字典通過引用傳遞到列表中,使用a.append(b). 例如,以下代碼:my_dict = {}my_list = []for i in range(3):    my_dict['id'] = str(i)    my_list.append(my_dict)    my_list返回 :[{'id': '2'}, {'id': '2'}, {'id': '2'}]如何通過以 pythonic 方式復制來傳遞它,而不將其聲明到 for 循環中?如何在不重新創建變量的情況下強制變量不是對象引用?
查看完整描述

6 回答

?
慕姐4208626

TA貢獻1852條經驗 獲得超7個贊

你只有一個字典,你不斷覆蓋它的鍵id,在循環中創建字典


my_list = []

for i in range(3):

    my_dict = {}

    my_dict['id'] = str(i)

    my_list.append(my_dict) # can shorten in my_list.append({'id' : str(i)})

    

可以通過列表理解來縮短


my_list = [{'id' : str(i)} for i in range(3)]


查看完整回答
反對 回復 2023-03-16
?
UYOU

TA貢獻1878條經驗 獲得超4個贊

理念:


列表存儲對對象 ( ) 的引用my_dict,因此無論何時更改其中的任何內容my_dict都會反映在列表 ( my_list)中


代碼:


my_list = []


for i in range(3):

    my_list.append({'id' : str(i + 1)})

    

print(my_list)

輸出:


[{'id': '1'}, {'id': '2'}, {'id': '3'}]


查看完整回答
反對 回復 2023-03-16
?
慕運維8079593

TA貢獻1876條經驗 獲得超5個贊

這是我的解決方案:


my_list = []


for i in range(1, 4): # If you put range(3), you'll get [{'id': '0'}, {'id': '1'}, {'id': '2'}]

    my_dict = {}

    my_dict['id'] = str(i)

    my_list.append(my_dict)

    

print(my_list)

更短的方法可能是:


my_list = []


for i in range(1, 4):

    my_list.append({'id' : str(i)})


print(my_list)


查看完整回答
反對 回復 2023-03-16
?
森林海

TA貢獻2011條經驗 獲得超2個贊

該my_dict實例是在 for 循環之外聲明和分配的,因此您要添加到my_list字典的同一實例中。


您需要為每個循環創建一個新的字典實例:


my_list = []

for i in range(3):

    my_dict = {}

    my_dict['id'] = str(i)

    my_list.append(my_dict)

這段代碼有很多可能的優化方式:


my_list = []

for i in range(3):

    my_list.append({'id': str(i)})

最好的 pythonic 方式是列表理解:


my_list = [{'id' : str(i)} for i in range(3)]


查看完整回答
反對 回復 2023-03-16
?
MM們

TA貢獻1886條經驗 獲得超2個贊

my_list = []


for i in range(0,3):


    my_dict = {} # making dictionary every time when running the loop.


    my_dict['id'] = str(i) # assigning value


    my_list.append(my_dict) #appending in list

    

my_list


查看完整回答
反對 回復 2023-03-16
?
慕尼黑的夜晚無繁華

TA貢獻1864條經驗 獲得超6個贊

是的,字典是通過引用傳遞的;所有對象都在 Python 中。橫向當然是按價值傳遞的。


如果將字典直接附加到列表中,代碼可以按預期工作,如下所示:


my_list = []

for i in range(3):

    my_list.append({'id': str(i)})

可以按照@Yusef Maali 的建議進行改進:


my_list = [{'id' : str(i)} for i in range(3)]


查看完整回答
反對 回復 2023-03-16
  • 6 回答
  • 0 關注
  • 177 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號