我有這段代碼只是對保證介於0和R-1(含)之間的數字列表進行排序。以下代碼正確排序,但我不明白爲什麼傳入的輸入保持不變。在Python中通過引用混淆列表傳遞
def bucket(arr, R):
assert type(arr) is list
for i in arr:
assert i >=0 and i < R
b = [0] * R
for i in arr:
b[i]+=1
arr = []
for ind, v in enumerate(b):
arr = arr + [ind] * v
print(arr)
爲什麼在這個例子中,函數後保持不變inp
被稱爲:
>>> inp
[3, 1, 4, 5, 4, 5, 5, 5, 1, 5]
>>> bucket(inp, 8)
[1, 1, 3, 4, 4, 5, 5, 5, 5, 5]
>>> inp # unchanged, why?
[3, 1, 4, 5, 4, 5, 5, 5, 1, 5]
)在python *中不支持通過引用語義*。 –
閱讀:https://nedbatchelder.com/text/names.html –