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

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

是否可以接受列表作業的復制?

是否可以接受列表作業的復制?

largeQ 2023-04-25 15:24:03
考慮以下最小示例:class MyClass():    def __init__(self, length):        self._list = [[] for _ in range(length)]    def __setitem__(self, key, value):        self._list[key] = value.copy()    def __getitem__(self, key):        return self._list[key]現在,Python 文檔說:Python 中的賦值語句不復制對象,它們在目標和對象之間創建綁定。應用上面的類意味著:>>> l = [[1,2,3,4], [3,2,1,0]]>>> C = MyClass(2)>>> C[0] = l[0]這確實是一個賦值語句。但是這些值現在是副本:>>> C[0] == l[0]True>>> C[0] is l[0]False對于 Python 中的類,這是可接受的行為嗎?
查看完整描述

1 回答

?
繁星點點滴滴

TA貢獻1803條經驗 獲得超3個贊

這本身并沒有錯。只要你的課程有很好的記錄,如果你有充分的理由去做,那就去做吧??紤]標準庫模塊中的以下類shelve,它本質上提供了一個類似 dict 的數據庫接口。由于使用object[key] = value將寫入磁盤,檢索該對象將從磁盤檢索它,它不會給你相同的對象(必然有緩存選項)!所以:


In [1]: import shelve


In [2]: data = [[1,2,3],[4,5,6]]


In [3]: database = shelve.open('db')


In [4]: database['key'] = data[0]


In [5]: database['key']

Out[5]: [1, 2, 3]


In [6]: database['key'] is data[0]

Out[6]: False

文檔的那部分是指對變量的賦值語句,如下所示:


some_var = foo

確實,它從不復制。而且你不能真正改變它(好吧,也許吧,但這是另一個問題)。__setitem__您可以隨心所欲地實施__getitem__。


查看完整回答
反對 回復 2023-04-25
  • 1 回答
  • 0 關注
  • 99 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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