回覆列表
  • 1 # 大暖小慧

    在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"]] 始終沒有改變

  • 中秋節和大豐收的關聯?
  • 家長如何對孩子實施愛的教育?