Come spiegare la differenza tra una variabile e una chiave in una coppia chiave-valore?

2

Le variabili e le chiavi nelle coppie chiave-valore sono entrambi identificatori per i valori, quindi, a livello concettuale, queste sembrano idee molto simili.

Come spiegheresti la differenza tra questi due concetti?

  • Le coppie di valori-chiave sono utilizzate nelle raccolte?
  • È che le variabili puntano a una posizione di memoria?
  • O qualcos'altro?

(Se guardo il codice, sono istintivamente consapevole della differenza, la domanda è più su come spiegarlo che non sembra troppo ovvio dato che fanno cose simili.)

    
posta user3347918 24.02.2014 - 19:21
fonte

4 risposte

4

Non c'è alcuna differenza reale.

Possiamo pensare a una variabile come nome che si associa ad un valore . Tutte le variabili visibili insieme costituiscono l'ambiente . Questa osservazione è importante in alcune discussioni teoriche e viene anche utilizzata in alcune implementazioni linguistiche (principalmente linguaggi dinamici come Ruby). Soprattutto gli oggetti possono essere rappresentati in modi diversi: alcuni possono scegliere strutture statiche in cui un membro dell'oggetto è un campo in quella struttura (ad es. C ++), altri possono usare dizionari dinamici che contengono tutti i membri come coppie chiave-valore (es. JavaScript). / p>

La cosa bella è che questi sono per lo più equivalenti tra loro: puoi vederne uno come generalizzazione, l'altro come ottimizzazione del rendimento.

In lingue sane, l'ambiente è noto in tempo di compilazione , mentre le chiavi in alcuni dizionari sono generalmente conosciute solo in tempo di esecuzione . Questa è l'unica differenza utile: quando la chiave di alcuni mapping è nota.

    
risposta data 24.02.2014 - 20:15
fonte
1

Non direi che è esattamente il caso. Personalmente penso alle coppie chiave-valore come tuple (a, b) : A * B in senso matematico come un elemento di un prodotto cartesiano A x B . Le variabili non arrivano nemmeno nella foto. La chiave è solo il primo componente della tupla. Solo perché una chiave può essere usata come comoda maniglia per l'intera tupla è incidentale e stai confondendo questi due casi. Potresti semplicemente capovolgere tutto e usare il valore per fare riferimento all'intera tupla.

    
risposta data 24.02.2014 - 20:13
fonte
0

La differenza dipende dal contesto della lingua. Mentre c'è una differenza per i linguaggi compilati (i nomi delle variabili hanno significato in fase di compilazione, mentre le chiavi hanno un significato in fase di esecuzione), in Python non c'è differenza, poiché i nomi delle variabili sono effettivamente memorizzati in un dict:

>>> foo
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'foo' is not defined
>>> globals()['foo'] = 'bar'
>>> foo
'bar'
>>> type(globals())
<class 'dict'>
    
risposta data 24.02.2014 - 20:38
fonte
0

In generale , entrambi vengono utilizzati come alias di memoria. Ma una variabile alias più direttamente un offset di memoria in fase di compilazione e una chiave informa un algoritmo di mappatura della memoria in fase di runtime.

Concettualmente , la differenza principale è uno di scope : se l'alias funziona in fase di compilazione rispetto a runtime.

Funzionalmente , la differenza principale è una delle mutabilità di runtime (di tutti gli alias di questo tipo): se la raccolta di alias può essere modificata in fase di runtime. Non è possibile compilare il codice e aggiungere Int32 xyz in fase di esecuzione. Ma puoi aggiungere chiave xyz a una raccolta. (Con alcune lingue interpretate come un'eccezione).

In pratica , la differenza principale è strategia di ricerca ed efficienza : le variabili tengono gli offset della memoria. Usarli è veloce. Le chiavi vengono convogliate tramite un algoritmo di ricerca che, relativamente parlando, alla fine determina un offset di memoria e ne restituisce il contenuto.

Durante il runtime viene eseguito molto lavoro per far funzionare le chiavi. Le variabili sono una specie di solo lì .

Tutto ciò presuppone che tu stia facendo riferimento a chiavi nel contesto di una raccolta. Puoi certamente avere coppie chiave-valore che non hanno nulla a che fare con le collezioni o trovare cose in memoria. Ma le chiavi in quel contesto sono sufficientemente rimosse funzionalmente che ... beh ... sto solo dando per scontato che la domanda non si riferisca a questo.

    
risposta data 06.08.2014 - 03:32
fonte

Leggi altre domande sui tag