簡體   English   中英

Python:在函數內復制字典也會修改原始副本

[英]Python: copying dictionary inside function modifies also original copy

我有一個計算一籃子物品稅的小腳本。 它的工作原理是創建一個具有正確值的新鍵“稅”。 由於我不想更改原始字典,因此我淺復制了輸入字典。 令我驚訝的是,這段代碼還更改了原始字典數據。 你能解釋一下為什么嗎?

data = {'book': {'n': 2, 'price': 12.49},
 'music CD': {'n': 1, 'price': 14.99},
 'chocolate bar': {'n': 1, 'price': 0.85}}

exceptions = ["book","food","chocolate", "headache pills"]

def computeTaxes(order):

ord = order.copy()

for item,value in ord.items():

    #calculate basic tax
    if any(ex in item for ex in exceptions):
        ord[item]['tax'] = 0

    else:
        ord[item]['tax'] = 0.10 * ord[item]['price']

    #calculate import duty
    if "import" in item:
        ord[item]['tax'] += 0.05 * ord[item]['price']

return ord

computeTaxes(data)

# data is now: 
{'book': {'n': 2, 'price': 12.49, 'tax': 0},
 'music CD': {'n': 1, 'price': 14.99, 'tax': 1.499},
 'chocolate bar': {'n': 1, 'price': 0.85, 'tax': 0}}

您應該使用復制庫

import copy

ord = order.copy()替換為ord = copy.deepcopy(order)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM