Python入门第17课——深浅拷贝(只读课堂)

    科技2022-07-16  100

    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教程就到这了,欢迎继续收看!

    Processed: 0.008, SQL: 8