return self.var[:]
这会返回什么?
Python允许您“切片”各种容器类型;这是一种缩写符号,用于获取有序集合的某些子集。例如,如果您有一个列表
foo = [1,2,3,4,5]
foo[1:4]
foo[1:] == [2,3,4,5]
foo[:4] == [1,2,3,4]
当然,如果在切片中省略两个数字,您将获得整个列表!但是,您将获得列表的副本而不是原始列表;实际上,这是复制列表的标准符号。请注意以下区别:
>>> a = [1,2,3,4]
>>> b = a
>>> b.append(5)
>>> a
[1, 2, 3, 4, 5]
>>>
>>> a = [1,2,3,4]
>>> b = a[:]
>>> b.append(5)
>>> a
[1, 2, 3, 4]
b = a
告诉 b
指向与 a
相同的对象,因此向 b
添加元素就相当于向 a
添加元素。复制列表 a
可以避免这种情况。请注意,这只会运行一级间接深度 - 如果 a
包含一个列表,并且您在 b
中添加了该列表中的元素,则仍会更改 a
。
顺便说一下,切片还有一个可选的第三个参数,即步长参数 - 它可以让您以大于1的跨度移动列表。因此,您可以编写 range(100)[0::2] 来获取所有小于100的偶数。
[:]
的情况下,“共享切片”(您的最后一个链接)与非愚蠢实现已经“共享”无关。 - John Machin这被称为列表切片:
[起始位置:终止位置:步长]
[起始位置:终止位置]
因此,如果我说:
list = range(20)
print list[1:3] #returns [2, 3]
print list[1:12:3] #returns [2, 5, 8, 11]
print list[14:] #because theres no end: [15, 16, 17, 18, 19]
print list[14:-2] #-2 from the end: [15, 16, 17]
你可以使用以下方式对列表使用运算符:
list=[1,2,3,4,5,6,7,8,9]
在方括号中间加上一个冒号,您就可以定义要选择的位置范围(起始位置为0)。因此我有以下选项:
list[0:3] 显示 [1,2,3],因为它从第一个数字的位置开始,并在第二个数字之前结束。
list[:3] 与之前相同,因为第一个数字不存在,所以没有开始限制。
list[5:] 显示从第五个位置到结尾的列表 [6,7,8,9]。
现在,如果 list[x,y] 中的 x 或 y 是负数,则它会从位置 x 开始(如果是 x),从 len(list)-2 位置结束(如果是 y)。 例如:list[-1:3]= [2,3]
现在您可以使用两个冒号 [x:y:z],其中 x 表示起始单元格,y 表示最后一个单元格(不包括返回区域),而 z 表示序列前进的步骤。 list[0:5:2]=[0,2,4]
a[2:4] = [4,5,6,7,8]
。 - John La Rooy