参考までにすべてを渡します。数値を指定した場合でも、その値を含むテーブルに対する参照です。これは、静的言語と動的言語の違いです。型はコンテナではなく値で保持され、変数はすべての値が存在する「値空間」への参照に過ぎません。変更可能なすべてのオブジェクト(整数、浮動小数点数、文字列)に加えて、作成するすべての変更可能なオブジェクト(リスト、dicts、オブジェクト)を含むこの値空間を想定することができます。もちろん、それらの存在は、あなたがそれらを関与させるときにのみ具体化されます(つまり、あなたのプログラムで42という数字を使用しないなら、 "値の空間"の値42に割り当てられたスペースはありません)。
これは、参照している番号が不変オブジェクトであるためです。何があっても4は4です。
def foo(num): # here, num is referring to the immutable entity 4
num *= 2 # num now refers to the immutable entity 8
a = 4 # a now is pointing to the immutable entity 4
foo(a) # a is still referring to the same entity 4
print(a) # prints what a refers to, still 4
あなたの編集に対応して、この
def foo(l): # here, l refers to the list it receives
l.append(5) # the list is appended with the number 5
a = [] # a now is pointing to a specific mutable list
foo(a) # a is still referring to the same specific mutable list
print(a) # prints what a refers to, the specific mutable list which now contains [5]
受け入れられた回答は実際には間違っています。 by-valueとby-referenceとの違いについてのniceacctの答えを見てください。 –
私はそれが間違っていることに同意しません。議論は用語についてであり、私たちがPythonがリファレンスとして渡すというより、参照値を渡すと言うことを望みます。私はその専門用語の違いを、教育的観点から見てもわかりません。 –
これはこの質問と重複しています:http://stackoverflow.com/questions/986006/python-how-do-i-pass-a-variable-by-reference 悲しいことに、その質問については当初受け入れられた答えも間違っていました(今受け入れられた答えはかなり良いです)、ちょうどStefanosの答えのように。 – nikow