在C ++中,将引用传递给大型数据结构以避免按值复制整个事物的开销是一种很好的做法。但是,Python的工作方式非常不同,我想知道如何最好地传递大型数据结构。
这是简单的版本。这是我应该使用的,还是有更好的东西?
foo(hugeArray):
# Change values in hugeArray
return hugeArray
hugeArray = foo(hugeArray)
解决方案(感谢jonrsharpe!)
foo(hugeArray)
hugeArray[0] = "New!"
myArray[0] = "Old."
foo(myArray)
print myArray[0] # Prints "New!"
该函数会更改原始数组,因此无需将返回值分配给原始数组以进行更改。
答案 0 :(得分:1)
Python将为您执行此操作,除非您明确复制或修改。
foo(hugeArray):
# Change values in hugeArray
return hugeArray
hugeArray2 = foo(hugeArray)
print("Was Python Clever? - ", hugeArray2 is hugeArray)
请注意,如果您想在不复制的情况下重新分配hugeArray
,则可以使用切片。所以
hugeArray[:] = hugeNewArray
而不是
hugeArray = hugeNewArray
答案 1 :(得分:1)
无需复制内容
def foo(array):
array[0] = 3 # do stuff to the array in place
huge_array = [1,2,3]
foo(huge_array) # returns None
print huge_array # [3,2,3]