找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 2847|回复: 3

[讨论] list列表被list再次包含一次的话,到底是什么鬼?

2

主题

2

帖子

2

积分

贫民

积分
2
yoyoliyang 发表于 2020-2-3 19:57:43 | 显示全部楼层 |阅读模式
如题,定义一个list,然后再次被list包含一次,却无法删除元素,如下,请问大侠为什么?
# def a list
p = list(range(1,5))
print(p)

# 被list包含一次的p的切片值
print(list(p)[2])
# 删除该切片值
del list(p)[2]
print(list(p)) # 被list包含一次的p的数据没变? why?
del p[1]
print(p) # 数据被删除

结果
[1, 2, 3, 4]3[1, 2, 3, 4][1, 3, 4]

回复

使用道具 举报

0

主题

8

帖子

8

积分

贫民

积分
8
温酒斩化腾 发表于 2020-2-13 02:46:42 | 显示全部楼层
首先,你打印的list函数返回列表、删除的list函数返回列表和删除后打印的list函数返回列表,这三个列表不是同一个哦!你打印时list(p)会返回一个列表[1,2,3,4],然而没有变量去接收这个列表,那么打印后python的垃圾回收机制就会把这个列表回收(删除),而你下面的del关键字删除的list(p)是删除又一个没有变量来接收的list函数返回列表,删除这个临时的、没有变量接收的列表的一个元素之后,python同样会把这个列表回收,下面一次打印依然是这样。按照你原来的意思,修改后的代码如下:

p = list(range(1,5))
print(p)
p2 = list(p)        #定义一个变量来接收list返回的列表
print(p2[2])
del p2[2]
print(p2)
回复 支持 1 反对 0

使用道具 举报

0

主题

1

帖子

1

积分

贫民

积分
1
Zeros遇见 发表于 2020-2-20 10:38:34 | 显示全部楼层
本帖最后由 Zeros遇见 于 2020-2-20 10:48 编辑
  1. # def a list
  2. print('原列表:', end='p = ')
  3. p = list(range(1, 5))
  4. print(p)

  5. print('再做一次list转换:', end='p1 = ')
  6. p1 = list(p)
  7. print(p1)

  8. print('删除p列表的第二项', end='p = ')
  9. del p[2]
  10. print(p)

  11. print('删除p1列表的第二项', end='p1 = ')
  12. del p1[2]
  13. print(p1)
复制代码

你没有把   list(p)保存下来,所以相当于你每次输出的都是一个新的列表。
回复 支持 反对

使用道具 举报

0

主题

2

帖子

2

积分

贫民

积分
2
TENX 发表于 2020-2-22 18:46:03 | 显示全部楼层
本帖最后由 TENX 于 2020-2-22 18:49 编辑

对p使用构造方法 list()实际上是获得了它的副本,默认做了浅复制,p: list, 和list(p): list 指代不同的对象

p == list(p)的结果是True
p is list(p)的结果是False
回复 支持 反对

使用道具 举报

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

本版积分规则

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