在python中,物件賦值實際上是物件的引用。當建立一個物件,然後把它賦給另一個變數的時候,python並沒有複製這個物件,而只是複製了這個物件的引用
一般有三種方法,
alist=
(1)直接賦值,預設淺複製傳遞物件的引用而已,原始列表改變,被賦值的b也會做相同的改變
>>> b=alist>>> print b[1, 2, 3, ["a", "b"]]>>> alist.append(5)>>> print alist;print b[1, 2, 3, ["a", "b"], 5][1, 2, 3, ["a", "b"], 5]
(2)copy淺複製,沒有複製子物件,所以原始資料改變,子物件會改變
>>> import copy
>>> c=copy.copy(alist)>>> print alist;print c[1, 2, 3, ["a", "b"]][1, 2, 3, ["a", "b"]]>>> alist.append(5)>>> print alist;print c[1, 2, 3, ["a", "b"], 5][1, 2, 3, ["a", "b"]]
>>> alist[3]["a", "b"]>>> alist[3].append("cccc")>>> print alist;print c[1, 2, 3, ["a", "b", "cccc"], 5][1, 2, 3, ["a", "b", "cccc"]] 裡面的子物件被改變了
(3)深複製,包含物件裡面的自物件的複製,所以原始物件的改變不會造成深拷貝里任何子元素的改變
>>> d=copy.deepcopy(alist)>>> print alist;print d[1, 2, 3, ["a", "b"]][1, 2, 3, ["a", "b"]]始終沒有改變>>> alist.append(5)>>> print alist;print d[1, 2, 3, ["a", "b"], 5][1, 2, 3, ["a", "b"]]始終沒有改變>>> alist[3]["a", "b"]>>> alist[3].append("ccccc")>>> print alist;print d[1, 2, 3, ["a", "b", "ccccc"], 5][1, 2, 3, ["a", "b"]] 始終沒有改變
在python中,物件賦值實際上是物件的引用。當建立一個物件,然後把它賦給另一個變數的時候,python並沒有複製這個物件,而只是複製了這個物件的引用
一般有三種方法,
alist=
(1)直接賦值,預設淺複製傳遞物件的引用而已,原始列表改變,被賦值的b也會做相同的改變
>>> b=alist>>> print b[1, 2, 3, ["a", "b"]]>>> alist.append(5)>>> print alist;print b[1, 2, 3, ["a", "b"], 5][1, 2, 3, ["a", "b"], 5]
(2)copy淺複製,沒有複製子物件,所以原始資料改變,子物件會改變
>>> import copy
>>> c=copy.copy(alist)>>> print alist;print c[1, 2, 3, ["a", "b"]][1, 2, 3, ["a", "b"]]>>> alist.append(5)>>> print alist;print c[1, 2, 3, ["a", "b"], 5][1, 2, 3, ["a", "b"]]
>>> alist[3]["a", "b"]>>> alist[3].append("cccc")>>> print alist;print c[1, 2, 3, ["a", "b", "cccc"], 5][1, 2, 3, ["a", "b", "cccc"]] 裡面的子物件被改變了
(3)深複製,包含物件裡面的自物件的複製,所以原始物件的改變不會造成深拷貝里任何子元素的改變
>>> import copy
>>> d=copy.deepcopy(alist)>>> print alist;print d[1, 2, 3, ["a", "b"]][1, 2, 3, ["a", "b"]]始終沒有改變>>> alist.append(5)>>> print alist;print d[1, 2, 3, ["a", "b"], 5][1, 2, 3, ["a", "b"]]始終沒有改變>>> alist[3]["a", "b"]>>> alist[3].append("ccccc")>>> print alist;print d[1, 2, 3, ["a", "b", "ccccc"], 5][1, 2, 3, ["a", "b"]] 始終沒有改變