{eval=Array;=+count(Array);}

问答专栏Q & A COLUMN

Python中list赋值时,L1=L与L1=L[:] 有什么区别?

ZweiZhaoZweiZhao 回答4 收藏1
收藏问题

4条回答

TwIStOy

TwIStOy

回答于2022-06-22 18:40

首先清楚,Python对象的三要素——Id,Type,Value。

  • Id:唯一标识一个对象

  • Type:标识对象的类型

  • Value:对象的值


然后,看下面代码样例:

执行结果:

发现l与l1实际是指向同一个对象,l2指向了新的对象(切片生成的新对象)。


同时需要二外注意,l1和l2是否相等呢?

  • l1 is l2 判断 l1 对象是否就是l2对象(通过id来判断)

  • l1 == l2 判断 l1 对象的值是否和 l2 对象的值相等(通过value来判断)

评论0 赞同0
  •  加载中...
xietao3

xietao3

回答于2022-06-22 18:40

前面这个是将对象绑定一个新的变量,L1和L还是指向同一个对象,后后者将对象拷贝一份在赋值给L1,L1指向了新的对象(就是用切片生成的新对象)

评论0 赞同0
  •  加载中...
AlphaGooo

AlphaGooo

回答于2022-06-22 18:40

这两者是有区别的,先看下面例子:

>>>L=[1,2,3,4]

>>>L1=L

>>>L2=L[:]

>>>L[1]=5

>>>L

[1,5,3,4]

>>>L1

[1,5,3,4]

>>>L2

[1,2,3,4]

L改变后,L1跟着变,L2并不改变。列表变量是这样实现的:

首先有列表值,例如上面的[1,2,3,4],存在计算机某一单元中,我们假定此单元是编号没。在L中实际上放的是单元编号m,当我们把L赋值给L1时,L1中放入的也是m。所以当我们更改L时,python解释程序,先根据L中的单元编号,找到存放列表值的单元,然后更改此单元的内容。由于L1与L中都是编号m,所以两者同时更改。L2时L的一部分,是新的列表,所以放入不同的单元。

评论0 赞同0
  •  加载中...
CatalpaFlat

CatalpaFlat

回答于2022-06-22 18:40

一图胜千语。


L1指向了原来的list

而L2指向了一个新的list

评论0 赞同0
  •  加载中...

相关问题

最新活动

您已邀请0人回答 查看邀请

我的邀请列表

  • 擅长该话题
  • 回答过该话题
  • 我关注的人
向帮助了您的网友说句感谢的话吧!
付费偷看金额在0.1-10元之间
<