重工电子论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 3817|回复: 0
打印 上一主题 下一主题

关于列表的不同两个不同拷贝的操作

[复制链接]

15

主题

24

帖子

379

积分

学生管理组

Rank: 8Rank: 8

积分
379
跳转到指定楼层
楼主
发表于 2017-10-9 22:58:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在之前的一个小程序当中,没能关注到列表复制这个问题,于是我们造成了一哥错误,这里我把它提出来
我们在对list 进行复制操作的时候一般有三种方法:
首先我们先初始化一个列表
[C] syntaxhighlighter_viewsource syntaxhighlighter_copycode
list1 = [1,2,3,4,5]

然后我们分别进行3种拷贝的操作
>>> list2 = list1  
>>> list2
[1, 2, 3, 4, 5]
>>> list3 = list1[:]
>>> list3
[1, 2, 3, 4, 5]

>>> list4 = list1.copy()
>>> list4
[1, 2, 3, 4, 5]


我们现在来对源列表也就是list1 进行一个操作
>>> list1.reverse()
>>> list1
[5, 4, 3, 2, 1]

那我们现在来看看list2 ,list3 , list4 的变化
>>> list2
[5, 4, 3, 2, 1]
>>> list3
[1, 2, 3, 4, 5]
>>> list4
[1, 2, 3, 4, 5]


我们发现,list2随着 list1的变化而变化,于是引发了一个讨论
对于python而言
列表名实际上对应了一个标签。
我们将一个列表名直接复制给另一个列表名实际上我们对应的还是同一块地址。
这个有点像C语言的指针的概念。
由于对应的是同一块地址,那么当list1 改变吗实际上list2也已经改变了,因为他们本来指向的就是同一块地址,换了个名字而已

而对于我们后两种的复制,那么实际上是另外开辟了一块地址,原原本本的将我们列表的值复制了过去。操作list1并不会影响list3 和list4
这是一个小的问题,但是如果没有注意当程序出现问题后,很难排查到。



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|cqutlab ( 渝ICP备15004556号

GMT+8, 2024-4-26 12:57 , Processed in 0.146879 second(s), 30 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表