ホームページ  >  記事  >  バックエンド開発  >  PythonとC言語での代入の違い

PythonとC言語での代入の違い

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼オリジナル
2019-06-24 13:09:293505ブラウズ

PythonとC言語での代入の違い

Python と C 言語の代入の違いは何ですか? まず、単純な Python コードがメモリ内でどのように見えるかを見てみましょう:

b = 3
b = b + 5

It メモリ上の動作図は次のとおりです。

PythonとC言語での代入の違い

ただし、コードの文字通りの意味から、「b に 3 を代入し、b に 5 を加算して、 assign それを b に渡します。"

つまり、コードは次のようになります:

b ← 3
b ← b + 5

したがって、メモリ内の次の操作図は、私たちの直感とより一致している可能性があります:

PythonとC言語での代入の違い

##つまり、b 5 の値が b に書き戻されます。典型的な C プログラムは次のようになります。変数 b に int 型のメモリ ユニットを割り当て、そのメモリ ユニットに整数 3 を格納します。 b はメモリ空間のブロックを表しており、移動することはありません。b の値は更新できますが、メモリ内の b のアドレスは変更されません。したがって、b = b 5 と言います。これは、b ← b 5 と同等です。b の値に 5 を加算した後も、その値は b に配置されます。変数 b は、それが存在するメモリ空間に緊密にバインドされています。

関連する推奨事項: 「

Python ビデオ チュートリアル

上記の Python のメモリ図を見ると、 b 5 が新しい値を取得し、 b がこの新しい値をポイントするようになります。価値。言い換えると、これが行うことは次のとおりです。

b → 3
b → b + 5

b が 3 を指すようにし、次に b が b の新しい値 5 を指すようにします。

C プログラムはメモリ ユニットに格納されている値を更新し、Python は変数へのポインタを更新します。

C プログラムの変数は値を格納しますが、Python の変数は値を指します。

C プログラムがメモリ アドレスを操作することで間接的にデータを操作し (各変数は固定メモリ アドレスに対応するため、変数を操作するということはメモリ アドレスを操作することを意味します)、データが受動的な位置にある場合、Python はそれを直接操作します。 . データ、データはアクティブな位置にあり、変数は参照関係としてのみ存在し、記憶機能を持ちません。

Python では、各データはメモリ空間を占有します。たとえば、新しいデータ b 5 もまったく新しいメモリ空間を占有します。

Python のこの操作ではデータが主体となり、データはデータと直接対話します。

データは Python ではオブジェクトと呼ばれます。

この文はそれほど厳密ではありません。しかし、この単純な例では機能します。

整数 3 は int 型オブジェクト、'hello' は文字列オブジェクト、[1, 2, 3] はリスト オブジェクトです。

Python はすべてのデータを「オブジェクト」として認識します。各オブジェクトにメモリ空間を割り当てます。オブジェクトが作成されると、その ID は変更されなくなります。

id ​​は、identity の略称です。 「同一性、同一性」という意味です。

Python では、id() を使用してオブジェクトの ID を取得できます。これは、メモリ内のオブジェクトのアドレスとみなすことができます。

オブジェクトを作成した後は、それを直接破棄することはできません。したがって、前の例では、変数 b は最初にオブジェクト 3 を指し、次に b 5 の実行を続けます。b 5 は新しいオブジェクト 8 を生成します。オブジェクト 3 は破棄できないため、b は Use object の代わりに新しいオブジェクト 8 を指すようにします。 8 を使用してオブジェクト 3 を上書きします。コードの実行が完了した後も、オブジェクト 3 とオブジェクト 8 がメモリ内に残り、変数 b はオブジェクト 8 を指します。

オブジェクト 3 を指す変数がない (つまり、参照できない) 場合、Python はガベージ コレクション アルゴリズムを使用してオブジェクト 3 をリサイクルするかどうかを決定します (これは自動的であり、プログラマが心配する必要はありません)それ)。

古いオブジェクトを上書きすることはできません。古いオブジェクトとの対話によって生成された新しいデータは、新しいオブジェクトに配置されます。つまり、それぞれの物体は独立した個体であり、それぞれの物体は独自の「主権」を持っています。したがって、2 つのオブジェクトの相互作用により、元のオブジェクトに影響を与えることなく新しいオブジェクトを生成できます。大規模なプログラムでは、オブジェクト間の相互作用は複雑ですが、この独立性により、これらの相互作用は安全になります。

C プログラムは、各変数に固定メモリ アドレスを割り当てます。これにより、C 変数間の独立性が確保されます。

C言語は変数(つまりメモリアドレス)間の相互作用であり、Pythonはオブジェクト(データ)間の相互作用です。これらは 2 つの異なる対話方法です。

以上がPythonとC言語での代入の違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。