第一次接觸深拷貝和淺拷貝是在c++語言中,python中,也存在著深拷貝和淺拷貝。
淺拷貝,就是給你一個引用,當(dāng)源數(shù)據(jù)改變的時候,你以前獲取的引用所指向的數(shù)據(jù)也會跟著變化;深拷貝,也是給你一個引用,不同的是它拷貝了份資源,給你的引用指向這份拷貝的資源,與源數(shù)據(jù)無任何聯(lián)系。
以代碼說明一切:
- >>> ls = [2,7, 'ac', ['2a', 45,10], {'a' : 'a1', 'b':123, 'z': 4, 'r' : 33}, 0]
- >>> ls2 = ls
- >>> ls3 = ls[:]
- >>> import copy
- >>> ls4 = copy.deepcopy(ls)
- >>> ls
- [2, 7, 'ac', ['2a', 45, 10], {'a': 'a1', 'r': 33, 'b': 123, 'z': 4}, 0]
- >>> ls2
- [2, 7, 'ac', ['2a', 45, 10], {'a': 'a1', 'r': 33, 'b': 123, 'z': 4}, 0]
- >>> ls3
- [2, 7, 'ac', ['2a', 45, 10], {'a': 'a1', 'r': 33, 'b': 123, 'z': 4}, 0]
- >>> ls4
- [2, 7, 'ac', ['2a', 45, 10], {'a': 'a1', 'r': 33, 'b': 123, 'z': 4}, 0]
- >>> ls.append(2008)
- >>> print ls
- [2, 7, 'ac', ['2a', 45, 10], {'a': 'a1', 'r': 33, 'b': 123, 'z': 4}, 0, 2008]
- >>> print ls2
- [2, 7, 'ac', ['2a', 45, 10], {'a': 'a1', 'r': 33, 'b': 123, 'z': 4}, 0, 2008]
- >>> print ls3
- [2, 7, 'ac', ['2a', 45, 10], {'a': 'a1', 'r': 33, 'b': 123, 'z': 4}, 0]
- >>> print ls4
- [2, 7, 'ac', ['2a', 45, 10], {'a': 'a1', 'r': 33, 'b': 123, 'z': 4}, 0]
第1行,初始化一個list
第2—5行,淺拷貝與深拷貝
第6—13行,源數(shù)據(jù)發(fā)生變化前,打印出源數(shù)據(jù)以及淺拷貝和深拷貝的數(shù)據(jù)
第14行,源數(shù)據(jù)增加一個新數(shù)據(jù)
第15—22,打印出淺拷貝與深拷貝數(shù)據(jù)
看到結(jié)果,就明白淺拷貝與深拷貝了