【发布时间】:2019-07-05 13:34:57
【问题描述】:
比如我有一个函数
def foo(a):
a[0],a[1] = a[1], a[0]
和
a = [1,2,3]
foo(a) 就地更改了a 的值,但foo(a[:1]) 没有。
请帮助让我知道如何使foo(a[:1])就地更改a的值
【问题讨论】:
-
list切片创建新的列表对象。您传入的listfoo(a[:1])确实发生了变化。但是,您会丢失对该列表的所有引用,因此当函数终止并且它的引用计数变为 0 时,它会立即被垃圾回收。请注意,您使用的是 lists 而不是数组。 -
谢谢,所以正确的问题应该是如何使用对同一对象的引用进行切片?无论如何,python中的列表是一个动态数组。我想通过传递当前列表的一部分来递归地执行此操作,但这样做不会改变原始列表中的任何内容。
-
再次列表切片总是返回一个新列表。您不能在不创建新列表的情况下对列表进行切片。您可以实现自己的切片功能,创建执行此操作的包装类,或者只是传递索引。我提到
list对象是因为 Python 确实 有数组,但list不是它们。通常,在 Python 的上下文中,“数组”特指numpy.ndarray对象,甚至是array.array对象。请注意,numpy.ndarray对象会生成原始数组的 视图,因此如果您实际使用数组,这将起作用! -
谢谢,对不起,我造成了一些混乱。我希望有一种方法可以通过切片传递引用。
标签: python list in-place sub-array