美文网首页
python的列表复制方法

python的列表复制方法

作者: 木千之 | 来源:发表于2018-09-12 10:30 被阅读108次

    2018/9/11 17:55:39

    今天在写程序时,遇到了一个有趣的问题,即python中关于同时创建多个列表的的问题。自己最初的想法是初始化一个100维的嵌套列表,即

    [[], []...,[],[]]

    自己的原始代码是:

    a = [] * 100

    事后自己发现由于[]代表为空列表,因此即便采取100倍复制,依旧是空列表。

    网上查了资料,如果想得到一个100维度的嵌套列表,必须事先包含一个嵌套列表:

    然而,上述问题立刻出现,随便修改多维列表的一个维度,其余所有维度都会变化。再次查找资料,终于得到答案:python的深浅复制。

    python语言在复制对象时提供深浅两种复制,其中浅复制仅仅复制了对象的引用,其内存地址还是同一块,因此一个改变会引起另一个改变;而只有深复制才可以重新开辟一个新的内存空间,得到完全独立的新对象。

    为了得到一个独立的嵌套列表,我们使用一种新语法:

    [ x for i in range(100)]

    其中x表示我们要复制的对象,后面的for循环表示复制次数,而注意的是,最终结果是一个列表。

    我们使用上述方法重新复制得到100维度的[]列表,并试着改变其中特定元素,查看整体的改变:

    上述实验中我们使用v表示复制的嵌套列表,并使用id()函数查看了不同元素的内存地址,可以看出此种方法得到的新列表中各个子列表的内存地址是不同的,而之前的传统乘法得到的列表中则是同一个对象。

    综上所述,简单小结:

    1. python中对象复制存在深浅复制;

    2. 一般赋值操作是浅复制,即拷贝了同一个对象的引用,指向同一个内存地址,修改会同步到所有赋值对象;

    3. 嵌套列表的复制(倍数)默认也是浅复制,即嵌套列表会以引用方式复制,变化会同步;

    4. 可以使用列表循环表达式实现同时创建多个独立的空列表: [[] for i in range(10)]

    The Promise--Secert Garden

    相关文章

      网友评论

          本文标题:python的列表复制方法

          本文链接:https://www.haomeiwen.com/subject/hunmgftx.html