私はこのコードスニペットでは、0とR-1(両端を含む)の間であることが保証されている数値のリストを並べ替えています。次のコードはソートを正しく実行しますが、渡された入力が変更されないまま残っている理由はわかりません。機能の後にそのままこの例ではinp
なぜリストは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
[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 –