欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python中l(wèi)ist列表復(fù)制的幾種方法(賦值、切片、copy(),deepcopy())

 更新時間:2022年08月19日 16:08:20   作者:程序遇上智能星空  
本文主要介紹了python中l(wèi)ist列表復(fù)制的幾種方法(賦值、切片、copy(),deepcopy()),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1、淺拷貝和深拷貝

淺拷貝復(fù)制指向某個對象的地址(指針),而不復(fù)制對象本身,新對象和原對象共享同一內(nèi)存。

深拷貝會額外創(chuàng)建一個新的對象,新對象跟原對象并不共享內(nèi)存,修改新對象不會影響到原對象。

賦值其實就是引用了原對象。兩者指向同一內(nèi)存,兩個對象是聯(lián)動的,無論哪個對象發(fā)生改變都會影響到另一個。

2、直接賦值

使用=來復(fù)制一個列表,實際上不僅復(fù)制了其中的內(nèi)容,也復(fù)制了其內(nèi)存地址,即引用了原列表。使用id()方法查看內(nèi)存地址也是一樣的。修改其中一個列表,也會直接更改另一個列表。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
if __name__ == '__main__':
    a = ["a", ["b", "c", "d"], ["e", "f"]]
    # 直接復(fù)制,即引用列表
    b = a
    print(a)
    print(b)
    # 通過id()查看內(nèi)存地址,為一樣的
    print(id(a), id(b))
    b[0] = "g"
    b[1][0] = "f"
    print(a)
    print(b)

輸出:

['a', ['b', 'c', 'd'], ['e', 'f']]
['a', ['b', 'c', 'd'], ['e', 'f']]
2030264836936 2030264836936
['g', ['f', 'c', 'd'], ['e', 'f']]
['g', ['f', 'c', 'd'], ['e', 'f']]
 
Process finished with exit code 0

3、for循環(huán)

使用for循環(huán)進行拷貝,僅第一層為深拷貝,對其它層依然是淺拷貝。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
if __name__ == '__main__':
    a = ["a", ["b", "c", "d"], ["e", "f"]]
    b = []
    # 使用for循環(huán)進行拷貝,僅第一層為深拷貝
    for i in a:
        b.append(i)
    print(a)
    print(b)
    b[0] = "g"
    b[1][0] = "f"
    print(a)
    print(b)

輸出:

['a', ['b', 'c', 'd'], ['e', 'f']]
['a', ['b', 'c', 'd'], ['e', 'f']]
['a', ['f', 'c', 'd'], ['e', 'f']]
['g', ['f', 'c', 'd'], ['e', 'f']]
 
Process finished with exit code 0

4、切片

使用切片方法進行拷貝,也僅對第一層為深拷貝,對其它層依然是淺拷貝。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
if __name__ == '__main__':
    a = ["a", ["b", "c", "d"], ["e", "f"]]
    # 使用切片進行拷貝,僅第一層為深拷貝
    b = a[:]
    print(a)
    print(b)
    b[0] = "g"
    b[1][0] = "f"
    print(a)
    print(b)

輸出:

['a', ['b', 'c', 'd'], ['e', 'f']]
['a', ['b', 'c', 'd'], ['e', 'f']]
['a', ['f', 'c', 'd'], ['e', 'f']]
['g', ['f', 'c', 'd'], ['e', 'f']]
 
Process finished with exit code 0

5、copy()方法

(1)list.copy()方法

使用list.copy()方法進行拷貝,也僅對第一層為深拷貝,對其它層依然是淺拷貝。由于列表中嵌套的列表實際保存的是地址,依然指向同一個內(nèi)存地址。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
 
if __name__ == '__main__':
    a = ["a", ["b", "c", "d"], ["e", "f"]]
    # 使用list.copy()方法進行拷貝,僅第一層為深拷貝
    b = a.copy()
    print(a)
    print(b)
    b[0] = "g"
    b[1][0] = "f"
    print(a)
    print(b)

輸出:

['a', ['b', 'c', 'd'], ['e', 'f']]
['a', ['b', 'c', 'd'], ['e', 'f']]
['a', ['f', 'c', 'd'], ['e', 'f']]
['g', ['f', 'c', 'd'], ['e', 'f']]
 
Process finished with exit code 0

(2)copy.copy()方法

使用copy.copy()方法進行拷貝,也僅對第一層為深拷貝,對其它層依然是淺拷貝。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import copy
 
if __name__ == '__main__':
    a = ["a", ["b", "c", "d"], ["e", "f"]]
    # 使用copy.copy()方法進行拷貝,僅第一層為深拷貝
    b = copy.copy(a)
    print(a)
    print(b)
    b[0] = "g"
    b[1][0] = "f"
    print(a)
    print(b)

輸出:

['a', ['b', 'c', 'd'], ['e', 'f']]
['a', ['b', 'c', 'd'], ['e', 'f']]
['a', ['f', 'c', 'd'], ['e', 'f']]
['g', ['f', 'c', 'd'], ['e', 'f']]
 
Process finished with exit code 0

6、deepcopy()方法

使用copy.deepcopy()方法進行拷貝,對所有層均為深拷貝,改變新列表并不會影響到原列表,推薦使用。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import copy
 
if __name__ == '__main__':
    a = ["a", ["b", "c", "d"], ["e", "f"]]
    # 使用copy.deepcopy()方法進行拷貝,對所有層均為深拷貝
    b = copy.deepcopy(a)
    print(a)
    print(b)
    b[0] = "g"
    b[1][0] = "f"
    print(a)
    print(b)

輸出:

['a', ['b', 'c', 'd'], ['e', 'f']]
['a', ['b', 'c', 'd'], ['e', 'f']]
['a', ['b', 'c', 'd'], ['e', 'f']]
['g', ['f', 'c', 'd'], ['e', 'f']]
 
Process finished with exit code 0

到此這篇關(guān)于python中l(wèi)ist列表復(fù)制的幾種方法(賦值、切片、copy(),deepcopy())的文章就介紹到這了,更多相關(guān)python list列表復(fù)制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論