我正在使用一個字典來存盤名為calendar. 庫的格式如下
{day : [log_book, [borrow_info], [return_info], [add_book], [fine]]}
和
log_book = [[book_name], [quantity], [restricted_type]]
我打算每天將唯一值存盤到log_book. 我試圖通過制作這個功能來做到這一點
def update_storage(calendar, day, log_book):
data = calendar.get(day)
data[0] = log_book
calendar.update({day:data})
return calendar
但是,據我所知,這會為每一天創建一個指標而不是一個唯一值。這是我想要的結果
{0 : [[['Introduction to python', 'harry potter'], [3, 1], ['TRUE', 'FALSE']], [], [], [], []],
1 : [[['Introduction to python', 'harry potter'], [3, 0], ['TRUE', 'FALSE']], [['1', 'adam', 'harry potter', '6']], [], [], []],
2 : [[['Introduction to python', 'harry potter'], [3, 0], ['TRUE', 'FALSE']], [], [], [], []],
3 : [[['Introduction to python', 'harry potter'], [3, 0], ['TRUE', 'FALSE']], [], [], [], []]}
這是我目前得到的結果,即使我根本沒有更新第 1 天(key = 0)
{0 : [[['Introduction to python', 'harry potter'], [3, 0], ['TRUE', 'FALSE']], [], [], [], []],
1 : [[['Introduction to python', 'harry potter'], [3, 0], ['TRUE', 'FALSE']], [['1', 'adam', 'harry potter', '6']], [], [], []]}
2 : [[['Introduction to python', 'harry potter'], [3, 0], ['TRUE', 'FALSE']], [], [], [], []],
3 : [[['Introduction to python', 'harry potter'], [3, 0], ['TRUE', 'FALSE']], [], [], [], []]}
正如您在第 2 天(key = 1)所看到的,adam 借了一本名為"harry potter"的書,將書的數量從 1 減少到 0。但是,當我更新字典時,它將每個值都更改為當前book_availability. 這是我如何使用上述函式更新值的示例
book_availability = [['Introduction to python', 'harry potter'], [3, 0], ['TRUE', 'FALSE']]
calendar = update_storage(calendar, day, book_availability)
我做錯了什么?我是資料結構和指標的新手。
uj5u.com熱心網友回復:
您可以查看這樣的事情是否以您預期/想要的方式作業:
def update_storage(calendar, day, log_book):
data = calendar.get(day)
data[0] = log_book.copy()
data[0][1] = data[0][1].copy()
calendar.update({day:data})
return calendar
我不知道您的整個程式如何,但您似乎正在操縱相同的(一組)串列(“文字”)。
當它作為以下傳遞時,這會data[0]指向book_availability(由指向一堆串列的“指標”組成)log_book:
data[0] = log_book
這意味著每個day共享相同的log_book.
這將給每個day單獨的log_book:
data[0] = log_book.copy()
BUT,因為.copy()只執行淺拷貝,這意味著副本中的每個指標仍將指向同一事物(串列)。
因此,要讓每一天都有自己的“數量”記錄,您至少需要:
data[0] = log_book.copy()
data[0][1] = data[0][1].copy()
請注意,data[0][1] = data[0][1].copy()單獨使用也是不夠的,因為如果它與 一起使用data[0] = log_book,您將使log_book所有days共享的相同點指向“數量”的新副本(已 / 將更新其中的“文字”)。
PS我寫的只是對你的疑問的解釋。在現實中實作目標可能是一種糟糕的方式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/384339.html
下一篇:如何洗掉存盤在節點中的指標?
