Python Referenzen und Objektkopien?

ChatGPT und mein Pythonbuch sagen folgendes:
„In Python werden Objekte durch Referenzen verwaltet, die auf den Speicherbereich zeigen, in dem das Objekt gespeichert ist. Wenn ein Objekt über eine Referenz zugewiesen wird, wird der Speicherplatz für das Objekt reserviert und die Referenz zeigt auf diesen Speicherbereich. Wenn auf denselben Wert bereits von einer anderen Referenz verwiesen wird, zeigt diese Referenz auf dasselbe Objekt/Speicherbereich.“

Aber danach steht in meinem Pythonbuch der Code am Ende dieser Nachricht.
Und über dem Code stand, dass mit diesem y.append(i) eine echte Kopie von x erstellen kann. Aber da ja schon x auf die Liste verweist hätte man nach dem .append() ja zwei Referenzen. Nämlich x und y. Also müsste Python laut der ersten Aussage doch mit beiden Referenzen auf ein und dasselbe Objekt verweisen. Dann wäre es aber keine Kopie mehr, sondern das gleiche Objekt.

Ich hoffe, dass ich mein Problem irgendwie erklären konnte.
LG Code Snake 🙂

import copy

x = [23, "hallo", -7.5]
y = []

for i in x:
    y.append(i)

print("dasselbe Objekt:", x is y)
print("gleicher Inhalt:", x == y)
print()

x = (23, ["Berlin", "Hamburg"], -7.5, 12.67)
y = copy.deepcopy(x)

print("dasselbe Objekt:", x is y)
print("gleicher Inhalt:", x == y)
IT, programmieren, Informatik, Programmiersprache, Python, Referenz, Python 3, Objektorientierte Programmierung
Wie kann ich glfw C++ richtig installieren?

Hallo Leute,

ich programmiere schon eine Weile in C++ aber bisher immer mit Clion weil ich mit Visual Studio einfach nicht zurecht komme. Immer wieder wurde ich von irgendwelchen Fehlermeldungen geplagt und fand wochenlang keine Lösung, bis ich es dann irgendwann aufgab.

Umsteigen wollte ich eigentlich nur, um Third-Party Libraries wie glfw nutzen zu können, aktuell benutze ich nur mingw und kompiliere mit g++.exe ohne irgendwelche drittanbieter-Bibliotheken, weil ich es nie richtig hinbekomme, sie einzubinden.

Selbst wenn ich wie vorgegeben vorging, kam es zu unermütlichen Fehlermeldungen. Deshalb habe ich bis jetzt immer nur auf header onlys zurückgegriffen, merke aber gerade, dass ich ohne glfw nicht weiter komme.

Am liebsten würde ich verstehen, wie ich die Bibliothek richtig einbinde, sodass ich weiterhin mit g++ selbst kompiliere. Ich habe dann schon alle möglichen include Dateien in mingw geworfen und so weiter, aber jedes Mal erfolglos. Als ich das mal in Visual Studio probiert habe, kam es schon beim Startelement zu Problemen weil ich immer irgend einen Fehler mit dem Kompilieren und Ausführen mit Visual habe. Auch Bibliotheken ließen sich nicht ohne Fehlermeldungen installieren.

Ich muss aber jetzt in die gui programmierung einsteigen und habe glfw vorgegeben. Ich muss aber zugeben, dass ich wohl bei der Installation von solchen Bibliotheken ein absoluter Laie bin..

Kann mir jemand helfen, das zum Laufen zu bringen?

Stellt mir doch bitte gerne gezielte Rückfragen, was ihr genau noch wissen wollt, um meine Probleme zu verstehen.

Vielen Dank im Voraus!

Lukas Zander

IT, Cplusplus, CPP, Informatik, Programmiersprache
Inwiefern macht das Upgrade zur 40er Serie zurzeit Sinn?

Kurze Frage zu den neuen 40er Karten von NVIDIA, ich spiel aktuell ziemlich viele Spiele unter anderem auch viele die viel Leistung erfordern und so langsam kommt mein Rechner an seine Grenzen. Es ist ein selbst erstellter Rechner mit einer RTX3060ti und so allmählich fühl ich mich eingeschränkt was die Leistung betrifft und würde gerne was Neues ranholen. Zwischen der RTX4070 und der RTX4070ti liegen glaube ich über 25% leistungsunterschied und 200€ preisunterschied. 899€ für eine RTX4070ti finde ich persönlich viel zu teuer, das ist ja mehr als ich vor einem Jahr für die RTX3070ti zahlen müsste, als die Preise so exorbitant hoch gewesen sind wegen der extrem hohen Nachfrage.

Ich hab meine 3060ti zum Beispiel zu der Zeit für 499€ bekommen und das hat sich schon viel angefühlt - zumindest für eine Grafikkarte der unteren Schicht. Aber damals hatte ich ja noch keine Grafikkarte, jetzt könnte ich meine noch zu einen relativ anständigen Preis verkaufen und den hohen Preis der 4070 oder 4070ti etwas kompensieren.

Und jetzt zu meiner eigentlich Frage: Ich würde meine Grafikkarte so oder so verkaufen, wenn ich mir eine Neue anschaffen würde, da ich keine weitere Nutzung für sie sehe, aber wie sehr lohnt sich ein Upgrade heute zu der nächsten Generation? Ich spreche jetzt nur vom preislichen Aspekt, ich bin mir sicher die Preise würden in 1 Jahr oder mehr deutlich zurückgehen, aber in einem Jahr hätte ich meine aktuelle Grafikkarte auch 1 Jahr mehr genutzt und würde dementsprechend weniger für sie bekommen. Jetzt ist die Frage, wie weit würde der Preis meiner Grafikkarte innerhalb dieses Jahres zurückgehen und wie weit würden die 40er Serien vom Preis sich zurückentwickeln, wenn sie es überhaupt tun werden? Wenn ich in einem Jahr 100€ weniger für meine Grafikkarte bekommen würde und 150€ weniger für die 40er Grafikkarten zahlen müsste, würde es mich eher weniger stören jetzt eine zu kaufen, aber wenn die Karten in einem Jahr ca. 200-300€ zurückgehen auf 500-600€ für die 4070ti oder 300-400€ für die 4070, dann würde ich natürlich noch warten.

PC, GPU, IT, Gaming, AMD, FPS, Gaming PC, Informatik, Nvidia, Nvidia GeForce, zocken, AMD Radeon, Nvidia GeForce RTX, RTX 4000
Division in Assembly. Zeichen sind in ASCII gespeichert?
section .text
global main

main:
  mov esi, 10           ; ESI holds current number
  mov eax, 0           ; EAX holds sum of numbers
  push 10             ; Line feed for end of line (Stack is first in, last out -> Line feed will be last char)
  mov edi, 10           ; Divisor of 10 for seperating digits of number (used in divisionLoop)



; Sum numbers 1 through 10
sumLoop:
  add eax, esi          ; Add number to sum
  dec esi             ; Next number
  jnz sumLoop           ; Loop until 0



; Seperate eax into its digits, by dividing by 10 multiple times,
; where in each division the remainder will be a single digit 
; and the quotient will be the remaining digits used as dividend in next loop run
divisionLoop:
  mov edx, 0           ; Make sure edx is empty, as it is used as upper half of dividend
  div edi             ; Divide eax by edi (= 10) => quotient is in eax (= Rest of digits for next loop), remainder in edx (= Single digit)
  add edx, 48           ; Make edx (digit) a char representing its value by adding '0' to it
  push edx            ; Push char to stack for usage in print later

  cmp eax, 0           ; Loop until quotient is 0 (=> no more digits left)
  jne divisionLoop



; Print digits from Stack one by one
printLoop:
  mov eax, 4
  mov ebx, 1
  mov ecx, esp          ; Print top of stack (esp always points to top of stack)
  mov edx, 1           ; Length of 1 byte (= 1 char)
  int 80h

  pop esi             ; Remove top of stack
  cmp esi, 10           ; Loop until Line feed is reached
  jne printLoop


exit:
  mov eax, 1
  mov ebx, 0           ; Exit code 0
  int 80h

Hallo,

hier steht ein Programm in Assembler, dass die Zahlen von 1 bis 10 addiert.

Die 55 durch 10 teilt und die Reste der Division dann in einem Stack speichert.

push....

Am Ende wird alles über den Standardkanal ausgegeben auf der Konsole.

Wenn ich 55 / 10 teile ergibt das Quotient 5 steht in Register eax und der Rest hier auch 5 in edx Register. Bevor ich jetzt den Rest auf den Stack lege wird die Zahl mit 48 addiert. ergbit 53 ist das char Zeichen 5 im ASCII Code.

Heißt das jetzt, dass die Ergebnisse bei einer ganzzahligen Division im Assembler-Code immer in ASCII-Zeichen gespeichert sind?

Computer, Mathematik, Java, Assembler, Informatik, Programmiersprache

Meistgelesene Beiträge zum Thema Informatik