在python中,物件賦值實際上是物件的引用。當建立乙個物件,然後把它賦給另乙個變數的時候,python並沒有拷貝這個物件,而只是拷貝了這個物件的引用
一般有三種方法,
alist=[
1
,
2
,
3
,[
"a"
,
"b"
]]
(1)直接賦值,傳遞物件的引用而已,原始列表改變,被賦值的b也會做相同的改變
(2)copy淺拷貝,沒有拷貝子物件,所以原始資料改變,子物件會改變
>>> import copy
>>> c=copy.copy(alist)
>>> print alist;print c
[1, 2, 3, ['a', 'b']]
[1, 2, 3, ['a', 'b']]
(3)深拷貝,包含物件裡面的自物件的拷貝,所以原始物件的改變不會造成深拷貝裡任何子元素的改變
>>> import copy
>>> d=copy.deepcopy(alist)
>>> print alist;print d
[1, 2, 3, ['a', 'b']]
[1, 2, 3, ['a', 'b']]始終沒有改變
淺拷貝 深拷貝和淺賦值 深賦值
include includeusing namespace std class string else 淺拷貝 也就是系統預設的拷貝,可寫可不寫。string const string s 預設的拷貝構造 深拷貝 string const string s string s2 s1 深賦值 str...
js 淺拷貝直接賦值 js的賦值與淺拷貝 深拷貝
昨天翻了下陣列api,看到concat和slice方法,突然想到這個兩個方法是淺拷貝還是深拷貝,結果陷入了死胡同,為什麼mdn文件說是淺拷貝,但進行簡單的操作為什麼能複製成功啊,糾結半天後才弄清原由,原來我一直把賦值和深淺拷貝搞混了。首先不要把引用型別的賦值歸結為淺拷貝,深拷貝和淺拷貝只針對像 ob...
python賦值,淺拷貝和深拷貝
a 1 b a a 2 a 2 b 1 你將1賦給a變數,然後拷貝a中的值,將它賦給變數b。當稍 後將a中的值改變為2時,這不會影響b中的值。這是因為a和b 是不同的變數,儲存了不同的值。但列表不是這樣的。當你將列表賦給乙個變數時,實際上是將列表的 引用 賦給了該變數。引用是乙個值,指向某些資料。列...