我明白,當你做一個字典的淺拷貝時,你實際上會製作一個引用的副本。所以如果我這樣做:淺拷貝:爲什麼列表更改但不是字符串?
x={'key':['a','b','c']}
y=x.copy()
所以列表['a','b','c']的參考被複制到y中。無論何時我更改列表(例如x['key'].remove('a')
),xict和y都會改變。這部分我明白。但是,當我考慮這樣的情況如下:
x={'user':'admin','key':['a','b','c']}
y=x.copy()
當我做y['user']='guest'
,X [「用戶」]不會改變,但在列表中仍然共享相同的參考。 所以我的問題是什麼使字符串不同於列表?這背後的機制是什麼?
對於一些很好的補充閱讀,多解包一下,請參閱[關於Python名稱和值的事實和神話](http://nedbatchelder.com/text/names.html)。 –
所以如果我把y ['user']當作一個指針,它包含的地址讓我們說Ox0001指向字符串'admin'的地址,但是當我做y ['user'] ='guest'時,python將爲字符串'guest'分配一個新的「內存塊」Ox0002,並將y ['user']內的地址更新爲新地址0x0002? – jujae
@jujae:這是關於發生的事情,是的。 –