[英]How to pass a list element as reference?
我将列表的单个元素传递给函数。 我想修改那个元素,也就是列表本身。
def ModList(element):
element = 'TWO'
l = list();
l.append('one')
l.append('two')
l.append('three')
print l
ModList(l[1])
print l
但是这种方法不会修改列表。 这就像元素是按值传递的。 输出是:
['one','two','three']
['one','two','three']
我希望函数调用后列表的第二个元素是“TWO”:
['one','TWO','three']
这可能吗?
已经在这里的解释是正确的。 但是,由于我想以类似的方式滥用 python,因此我将提交此方法作为解决方法。
从列表中调用特定元素直接返回列表中该元素的值的副本。 即使复制列表的子列表也会返回对包含值副本的数组的新引用。 考虑这个例子:
>>> a = [1, 2, 3, 4]
>>> b = a[2]
>>> b
3
>>> c = a[2:3]
>>> c
[3]
>>> b=5
>>> c[0]=6
>>> a
[1, 2, 3, 4]
b
仅复制值, c
也不是从a
复制的子列表,都不能更改a
值。 尽管它们有共同的起源,但没有任何联系。
但是,numpy 数组使用“原始”内存分配并允许返回数据视图。 视图允许以不同的方式表示数据,同时保持与原始数据的关联。 因此,一个工作示例是
>>> import numpy as np
>>> a = np.array([1, 2, 3, 4])
>>> a
array([1, 2, 3, 4])
>>> b = a[2]
>>> b
3
>>> b=5
>>> a
array([1, 2, 3, 4])
>>> c = a[2:3]
>>> c
array([3])
>>> c[0]=6
>>> a
array([1, 2, 6, 4])
>>>
虽然仅通过值提取单个元件仍然份,保持元件的阵列视图2
为参考原始元件2
的a
(虽然现在元素0
的c
),并进行变更c
的值改变a
作为好。
Numpy ndarray
有许多不同的类型,包括通用对象类型。 这意味着您可以为几乎任何类型的数据维护这种“按引用”行为,而不仅仅是数值。
Python 是一种按值传递的语言,因此您不能通过函数ModList
赋值来更改值。 您可以做的是将列表和索引传递给ModList
,然后以这种方式修改元素
def ModList(theList, theIndex) :
theList[theIndex] = 'TWO'
ModList(l, 1)
在很多情况下,你也可以考虑让函数既修改又返回修改后的列表。 这使得调用者代码更具可读性:
def ModList(theList, theIndex) :
theList[theIndex] = 'TWO'
return theList
l = ModList(l, 1)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.