找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 116|回复: 3

[讨论] 有关list类切片和浅拷贝的困惑

1

主题

8

帖子

8

积分

贫民

积分
8
pan1394 发表于 2018-11-27 10:22:46 | 显示全部楼层 |阅读模式
本人初学python. 在学习到list的时候有点疑问.
按照手册说明:
  1. All slice operati** return a new list containing the requested elements. This means that the following slice returns a new (shallow) copy of the list:
  2. >>> squares = [1, 4, 9, 16, 25]
  3. >>> backup = squares[:]
  4. >>> squares
  5. [1, 4, 9, 16, 25]
  6. >>> backup
  7. [1, 4, 9, 16, 25]
  8. >>> squares is backup
  9. False
复制代码

好, 这个很简单.  我们有一个 变量 squares, 一个副本 backup. 他们的内存地址是不一样的. 但是请看下面:
  1. >>> squares
  2. [1, 4, 9, 16, 25]
  3. >>> del squares[:]
  4. >>> squares
  5. []
  6. >>>
复制代码

当我进行del 操作的时候, 这个del squares[:]直接操作的是squares本体. 这个需要怎么理解.
当切片操作进行赋值的时候会产生一个副本.
而在直接对这个切片进行操作没有赋值符号的时候, 又是对这个list本体进行变更. 请大佬给我解惑.
回复

使用道具 举报

1

主题

7

帖子

7

积分

贫民

积分
7
xiaoluo 发表于 2018-11-27 23:14:28 | 显示全部楼层
del squares[:],删除列表的所有元素
回复 支持 反对

使用道具 举报

3

主题

272

帖子

272

积分

侠客

积分
272

热心会员

uitb 发表于 2018-11-28 12:34:27 | 显示全部楼层
我理解的是切片是直接在对数据本身进行操作了,而不是内存地址,所以切片赋值直接把数据拷贝了一份给新变量,切片删除直接把数据删除了,普通赋值只是把内存指向一下,而不管数据内容是个啥玩意儿
回复 支持 反对

使用道具 举报

0

主题

7

帖子

7

积分

贫民

积分
7
zyj321321321 发表于 2018-12-6 14:42:25 | 显示全部楼层
squares[x:x]切片生成新的列表,del squares[x:x]操作删除自身列表内容。[x:x]表示范围。生成和删除可以分开理解。
回复 支持 反对

使用道具 举报

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

本版积分规则

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