Perché le variabili in Python sono diverse dagli altri linguaggi di programmazione? [chiuso]

2

Secondo la mia comprensione, una variabile in Python è:

A name that refers to a value stored in the computer memory, and it's like a label on a box.

ma in altri linguaggi di programmazione è:

A location in the memory where values are stores, and it's like a box.

  • Perché questa differenza? (Ciò che distingue Python?)

  • La documentazione di Python non dice cos'è una variabile, quindi come gli autori dei libri di Python sanno che se non è menzionato in esso?

posta Mahmud Muhammad Naguib 05.04.2016 - 15:06
fonte

1 risposta

11

Questa non è una distinzione Python vs Other Languages - in realtà è una distinzione Tipi di valore vs tipi di riferimento . Python usa i tipi di riferimento, e mentre molti linguaggi moderni tendono ad usare i tipi di riferimento, è comune confrontare Python (o qualsiasi lingua, in realtà) con C / C ++, che usano tipi di valore.

(Sto semplificando molto le cose qui - ci sono linguaggi che supportano sia i tipi di riferimento sia quelli di valore, i linguaggi che usano i tipi di valore hanno solitamente dei puntatori, che sono la versione di tipo valore dei tipi di riferimento e alcune lingue che usano il riferimento i tipi usano i tipi di valore per le primitive)

Con tipi di riferimento - come quello che usa Python - la variabile si riferisce alla "scatola" nella memoria. Ciò significa che più variabili possono fare riferimento alla stessa casella:

class Foo:
    x = 1

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

Quando abbiamo cambiato bar.x , anche foo.x è stato modificato. Questo perché foo e bar sono entrambi etichette nella stessa casella.

Confronta con questo codice 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 usa i tipi di valore, quindi foo e bar non sono "etichette" - sono le stesse scatole. Ecco perché quando cambiamo bar.x , foo.x non cambia - sono scatole diverse e bar = foo non fa bar si riferisce alla stessa scatola di foo come ha fatto in Python - invece, copia il contenuto della casella foo nella casella bar .

    
risposta data 05.04.2016 - 15:39
fonte

Leggi altre domande sui tag