如果想在 V2EX 获得更好的推广效果,欢迎了解 PRO 会员机制:
https://www.v2ex.com/pro/about

如果你经常使用铜币置顶主题,持有 V2EX Solana Token 会在每日签到时获得额外铜币:
https://www.v2ex.com/solana
fanqieipnet
V2EX  ›  推广

list 封装的 copy 方法实现对列表的浅拷贝

  •  
  •   fanqieipnet · Jan 12, 2021 · 868 views
    This topic created in 1954 days ago, the information mentioned may be changed or developed.
    list 封装的 copy 方法实现对列表的浅拷贝,浅拷贝只拷贝一层,到底是怎么回事呢?今天番茄加速就来讲一下。

       In [38]: c =[1,3,5]

       In [39]: cc = c.copy()

       c 和 cc 分别指向一片不同内存,这样修改 cc 的第一个元素,原来 c 不受影响:

       In [40]: cc[0]=10 # 修改 cc 第一个元素

       In [41]: cc

       Out[41]: [10, 3, 5]

       In [42]: c # 原来 c 不受影响

       Out[42]: [1, 3, 5]

      但是,如果内嵌一层列表,再使用 copy 时只拷贝一层:

       In [32]: a=[[1,3],[4,2]]

       In [33]: ac = a.copy()

       In [34]: ac

       Out[34]: [[1, 3], [4, 2]]

      内嵌的列表并没有实现拷贝。因此再修改内嵌的元素时,原来的列表也会受到影响。

       In [35]: ac[0][0]=10

       In [36]: ac

       Out[36]: [[10, 3], [4, 2]]

       In [37]: a

       Out[37]: [[10, 3], [4, 2]]

      要想实现深度拷贝,需要使用 Python 模块 copy 中的 deepcopy 方法。

      列表可变性

      列表是可变的,可变的对象是不可哈希的,不可哈希的对象不能被映射,因此不能被用作字典的键。

       In [51]: a=[1,3]

       In [52]: d={a:'不能被哈希'} #会抛出如下异常

      # TypeError: unhashable type: 'list'

      但是,有时我们确实需要列表对象作为键,这怎么办?

      可以将列表转化为元祖,元祖是可哈希的,所以能作为字典的键。
    No Comments Yet
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3879 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 56ms · UTC 04:16 · PVG 12:16 · LAX 21:16 · JFK 00:16
    ♥ Do have faith in what you're doing.