我想避免在創建一個對象的新實例並使用該對象之後修改用戶參數。在這裏好的做法是立即複製init()方法中的關鍵參數,還是有更好的解決方案?避免在__init__方法中通過deepcopy更改用戶參數?
這裏是一個具體的例子:
import copy
class Myclass:
def __init__(self, x):
self.x = copy.deepcopy(x)
def change(self):
self.x[0] += 1
>>> x = [0]
>>> C = Myclass(x)
>>> C.change()
>>> print(x)
0
我無法重現這一點。你使用的是什麼版本的Python? –
這不是一個實踐問題。如果你需要複製,那麼你需要複製。沒有什麼更多。 – freakish
我的意見是,複製應該通常是調用者的責任。這在用戶不關心輸入的內容是否改變(可能通過將該責任推回到調用者上來避免)的常見情況(可能)中引入開銷。這就是說,實用性有時會打敗人們的純潔性,如果你想這樣做是出於實際的原因,那麼可能沒有比你在這裏暗示的更好的方法。 – mgilson