web-dev-qa-db-ja.com

Pythonの変数が他のプログラミング言語と異なるのはなぜですか?)

私が知っていることによると、Pythonの変数はボックスのラベルのようにコンピュータメモリに保存された値を参照する名前です

しかし、他のプログラミング言語では、変数は値が格納されるメモリ内の場所であり、ボックスのようなものです。

  • なぜその違いが存在するのですか?

  • Pythonのドキュメントでは変数とは何かを教えてくれないので、Python本の著者はそれが何であるかを知っていますか?

これはPythonと他の言語の区別ではありません-実際には値の型と参照の型区別。 Pythonは参照型を使用します。多くの最近の言語も参照型を使用する傾向がありますが、Python(または実際には任意の言語)を値型を使用するC/C++と比較することは一般的です。

(私はここで大幅に簡略化しています-参照型と値型の両方をサポートする言語があり、値型を使用する言語には通常、参照型の値型バージョンであるポインターがあり、参照型を使用する一部の言語は値を使用しますプリミティブのタイプ)

Pythonが使用するもの-変数refersのような参照型を使用して、メモリ内の「ボックス」へ。これは、複数の変数が同じボックスを参照する可能性があることを意味します:

class Foo:
    x = 1

foo = Foo()
bar = foo
bar.x = 10
print(foo.x)  # prints 10

bar.xを変更すると、foo.xも変更されました。これは、foobarが両方とも同じボックスに対してlabelsであるためです。

次のCコードと比較してください。

#include<stdio.h>

struct Foo {
    int x;
};

int main(int ARGC, char** ARGV) {
    struct Foo foo, bar;
    foo.x = 0;
    bar = foo;
    bar.x = 10;
    printf("%d\n", foo.x); // prints 0
    return 0;
}

Cは値型を使用するため、foobarは「ラベル」ではなく、ボックスそのものです。そのため、bar.xを変更しても、foo.xは変更されません。これらは異なるボックスであり、bar = fooは、barfoo Python-で行ったように-代わりに、fooボックスの内容をbarボックスにコピーします。

16
Idan Arye