Gå til innhold

Anbefalte innlegg

Hvordan løser jeg dette pointer problemet i python når python ikke har pointere?

a = 1
b=a
print a,b
<<<1 1
a=2
print a,b
<<<2 1

Jeg vil at b også skal endres til å være det samme som a (1).

 

Jeg ønsker å edre på objektet som a og b ar koblet til, eller om det ikke går og jeg må gi dem ett nytt objekt å peke på så vil jeg at det skal endres for alle og ikke kun den ene som her.

Endret av -kga-
Lenke til kommentar
Videoannonse
Annonse

Python har "names" eller "identifier" som et navnskilt koblet til et objectet.

>>> a = 1
>>> id(a)
86174040
>>> #a lever som et integer object 1,med en tildelt plass minnet som id() viser

>>> b = a
>>> id(b)
86174040
>>> id(a)
86174040
>>> #Det som skjer her er at både a og b peker til integer object 1 som nå har 2 navnskilt(identifiers) a og b

>>> a = 2
>>> #Hvis vi tilordner a til integer 2 object.
>>> #Vil originale integer 1 objekt ikke lenger ha navnet a tilordnet.
>>> #garbage collection vil rydde opp,men rører ikke integer 1 object som nå har kun et navn tilordnet b.
>>> #a og b vil nå være 2 forskjellige objecter.
>>> id(a)
87091532
>>> id(b)
86174040
>>> 

Endret av SNIPPSAT
Lenke til kommentar

Hvordan løser jeg dette pointer problemet i python når python ikke har pointere?

a = 1
b=a
print a,b
<<<1 1
a=2
print a,b
<<<2 1

Jeg vil at b også skal endres til å være det samme som a (1).

 

I tillegg til det SNIPPSAT skrev -- den klassiske løsningen er å pakke den verdien du ønsker å dele på denne måten i et annet objekt. Det "vanlige" valget å oppnå det på er via lister/tuples (og det er også derfor man blir advart av epylint om å bruke dem som default arguments):

 

a = [3,]
b = a
b[0] = 4
print a
=> [4]

 

Jeg ønsker å edre på objektet som a og b ar koblet til, eller om det ikke går og jeg må gi dem ett nytt objekt å peke på så vil jeg at det skal endres for alle og ikke kun den ene som her.

 

"Tilordning" (iallfall uttrykt via operator= i Python) virker annerledes enn det du ønsker akkurat i denne situasjonen. En variabel i Python kan ikke være et annet navn for en annen variabel (slik det er tilfellet med references i C++, f.eks.).

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...