In [1]: #欢迎来到“只读课堂”!
In [2]: #今天,我们来学一个不一样的东西:深浅拷贝。
In [3]: #先看这个例子,一下两个列表,修改其中一个另外一个也会随之更改,没有拷贝。
In [4]: a = [1,2,3,[4,5]]
In [5]: b = 1
In [6]: a[0] = 'a'
In [7]: a[3][0] = 'a'
In [8]: a
Out[8]: ['a', 2, 3, ['a', 5]]
In [9]: b
Out[9]: 1
In [10]: b = a
In [11]: b
Out[11]: ['a', 2, 3, ['a', 5]]
In [12]: #这样b就拷贝了a
In [13]: #再深一步了解,例如:(在设置变量名的时候,请不要用python原默认的名称。
In [14]: list_1 = [1,2,3,4]
In [15]: list_2 = [1,2,3,4]
In [16]: list_1[0] = 'a'
In [17]: list_1
Out[17]: ['a', 2, 3, 4]
In [18]: #我们看一下list_2会不会因为list_1的修改而修改。
In [19]: list_2
Out[19]: [1, 2, 3, 4]
In [20]: #显然它就是“你改你的,关我啥事”。
In [21]: #如果这样:
In [22]: list_2 = list_1
In [23]: list_1[0] = 'a'
In [24]: list_1
Out[24]: ['a', 2, 3, 4]
In [25]: #它确确实实地改成了a
In [26]: list_2
Out[26]: ['a', 2, 3, 4]
In [27]: #你会发现,它也改了。
In [28]: #——————————————————————————————————————————————————————————————————————
In [29]: #进行拷贝
In [30]: 11 = [1,2,3,4]
In [31]: L = [1,2,3,4]
In [32]: Q = L[:]
In [33]: L
Out[33]: [1, 2, 3, 4]
In [34]: Q
Out[34]: [1, 2, 3, 4]
In [35]: #这样把它全部拷下来了
In [36]: #如果更复杂点:
In [37]: L = [1,2,3,['a','b']]
In [38]: Q = L[:]
In [39]: L
Out[39]: [1, 2, 3, ['a', 'b']]
In [40]: Q
Out[40]: [1, 2, 3, ['a', 'b']]
In [41]: #用切片改了。
In [42]: #如果原来地改地,拷贝后的会不会改呢?
In [43]: L = ['1','b']
In [44]: L
Out[44]: ['1', 'b']
In [45]: Q
Out[45]: [1, 2, 3, ['a', 'b']]
In [46]: #它是不会变地。
In [47]: #这就是“浅拷贝”。
In [48]: #——————————————————————————————————————————————————————————————————————
In [49]: #copy模块
In [50]: import copy
In [51]: L
Out[51]: ['1', 'b']
In [52]: Q
Out[52]: [1, 2, 3, ['a', 'b']]
In [53]: #例如:
In [54]: Q = copy.deepcopy(L)
In [55]: #这样就拷过去了。
In [56]: #如果原来的值再改
In [57]: L = [121212]
In [58]: L
Out[58]: [121212]
In [59]: Q
Out[59]: ['1', 'b']
In [60]: #它就不会改了。
In [61]: #这就是“深拷贝”。
In [62]: #列表是可变的,所以我们要掌握“深浅拷贝”这个知识,不然就会出现错误。
In [63]: print("\n本次“只读课堂”的python教程就到这了,欢迎继续收看!\n")
本次“只读课堂”的python教程就到这了,欢迎继续收看!