美文网首页
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的列表复制方法

    2018/9/11 17:55:39 今天在写程序时,遇到了一个有趣的问题,即python中关于同时创建多个列表的...

  • Python 浅复制与深复制

    《流畅的 Python》8.3 默认做浅复制 读书笔记 复制列表对象时,如果列表对象中包含其他列表对象,那么应该复...

  • Python列表赋值,复制,深拷贝以及5种浅拷贝详解

    Python列表赋值,复制,深拷贝以及5种浅拷贝详解 概述 在列表复制这个问题,看似简单的复制却有着许多的学问,尤...

  • 107、NumPy的排序

    NumPy的排序跟Python内置的列表类型一样,可以使用sort方法就地排序。 就地排序就是不复制...

  • 菜鸟编程学习(python&C--006)

    Python 练习实例7(Python 100例) 题目:将一个列表的数据复制到另一个列表中。 程序分析:使用列表...

  • 复制列表-使用切片和不使用切片的区别

    我们常常需要复制列表,下面给出两种复制列表的区别 如果现在直接输出,那么这两种复制列表的方法是没有区别的,如下 但...

  • python 数组列表复制

    她对你挑三拣四,要求你收敛脾气,要求你不能任性,要求你百依百顺,要求你懂事,却不知道以前有个人只要你快乐. 前端Q...

  • Python100例--007

    题目:将一个列表的数据复制到另一个列表中。方法一: 方法二: 方法三: 方法四:

  • python入门教程NO.3 用python破解谍报密码

    python入门教程NO.3 用python破解谍报密码 本文涉及的python基础语法为:列表及其方法 列表 我...

  • python--深浅拷贝

    python学习中,有这样一个问题,列表的拷贝。当列表有嵌套列表时候,那么在进行复制拷贝的时候就会产生内列表的元素...

网友评论

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

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