python教程:深copy浅copy
生活随笔
收集整理的這篇文章主要介紹了
python教程:深copy浅copy
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在python中,對象賦值實際上是對象的引用。當創建一個對象,然后把它賦給另一個變量的時候,python并沒有拷貝這個對象,而只是拷貝了這個對象的引用。
1. 賦值
賦值其實只是傳遞對象引用,引用對象id是一樣的。原始列表改變,被賦值的b也會做相同的改變。
alist = [1,2,3,["a","b"]] b = alist print(b) >>>[1, 2, 3, ['a', 'b']]alist.append(5) print(alist) >>>[1, 2, 3, ['a', 'b'], 5]print(b) >>>[1, 2, 3, ['a', 'b'], 5]2.淺拷貝
淺拷貝是指拷貝的只是原始對象元素的引用,換句話說,淺拷貝產生的對象本身是新的,但是它的內容不是新的,只是對原對象的一個引用。
''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:579817333 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' >>> import copy >>> alist=[1,2,3,["a","b"]] >>> 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']] #里面的子對象被改變了淺copy的幾種方式:
- 使用切片[:]操作進行拷貝
- 使用工廠函數(如list/dir/set)等進行拷貝
- copy.copy()
3. 深拷貝
深拷貝是指完全拷貝原始對象,而且產生的對象是新的,并且不受其他引用對象的操作影響。
深copy:
Names2 = copy.deepcopy(names)
>>> import copy >>> alist=[1,2,3,["a","b"]] >>> 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教程:深copy浅copy的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python教程:mixin详解
- 下一篇: 三种python序列类型