我在分析一些 Python 代码,我不知道是什么
pop = population[:]
它是类似于 Java 中的数组列表还是类似于二维数组?
它是一个从序列开始到结束的 切片,通常产生一个浅拷贝。
(好吧,这是 不止如此,但你还不需要关心。)
这是一个片符号的示例,它的作用取决于 population的类型。如果 population是一个列表,这一行将创建该列表的 肤浅的复制品。对于类型为 tuple或 str的对象,它将什么也不做(如果没有 [:],该行也将做同样的事情) ,对于(比如说) NumPy 数组,它将为相同的数据创建一个新视图。
population
tuple
str
[:]
它创建列表的副本,而不是仅仅为已存在的列表分配新名称。
了解一个列表切片通常会复制列表的一部分也会有所帮助。例如,population[2:4]将返回一个包含填充[2]和填充[3]的列表(切片是右排他的)。去掉左右索引,就像在 population[:]中一样,它们分别默认为0和长度(总体) ,从而选择整个列表。因此,这是一个常见的习惯用法,使一个列表的副本。
population[2:4]
population[:]
呃... 这要看具体情况。最终,它将一个 slice对象(slice(None,None,None))传递给以下方法之一: __getitem__、 __setitem__或 slice(None,None,None)0。(实际上,如果对象有一个 slice(None,None,None)1,那么将使用它来代替 __getitem__,但是现在不推荐使用它,不应该使用它)。
slice
slice(None,None,None)
__getitem__
__setitem__
对象可以对切片执行它们想要的操作。
在下列情况下:
x = obj[:]
这将使用传入的切片对象调用 obj.__getitem__。实际上,这完全等效于:
obj.__getitem__
x = obj[slice(None,None,None)]
(尽管前者可能更有效,因为它不需要查找 slice构造函数——它都是用字节码完成的)。
对于大多数对象,这是创建序列的一部分的浅拷贝的一种方法。
下一步:
x[:] = obj
Is a way to set the items (it calls __setitem__) based on obj.
obj
而且,我想你可能会猜到:
del x[:]
电话; ——。
你也可以传递不同的切片:
x[1:4]
构造 slice(1,4,None)
slice(1,4,None)
x[::-1]
构造 slice(None,None,-1)等等。进一步阅读: 解释 Python 的片符号
slice(None,None,-1)
[:] 用于限制或切片数组,散列 例如: [1:5]用于显示1到5之间的值,即1-4 [开始: 结束] 基本上用于数组的切片,理解括号接受变量的平均值或关键字显示,和“ :”是用来限制或切片整个数组成数据包。