Unerwartete Änderung der Variablen nach Python -FunktionsaufrufPython

Python-Programme
Anonymous
 Unerwartete Änderung der Variablen nach Python -Funktionsaufruf

Post by Anonymous »

Betrachten Sie den folgenden kleinen Python-Snippet, in dem ich der ersten Spalte einer 3 x 3-Matrix '2' hinzufüge: < /p>

import numpy as np

def changeValue(kernel):
kernel[0,0]=kernel[0,0]+ 2
kernel[1,0]=kernel[1,0]+ 2
kernel[2,0]=kernel[2,0]+ 2
return kernel

myKernel = np.array((
[0, -1, 0],
[-1, 5, -1],
[0, -1, 0]), dtype="int")
CVkernel=myKernel

print(CVkernel)
a=changeValue(myKernel)
print(a)
print(CVkernel)
< /code>

Ich erhalte die folgende Ausgabe < /p>

[[ 0 -1 0]
[-1 5 -1]
[ 0 -1 0]]

[[ 2 -1 0]
[ 1 5 -1]
[ 2 -1 0]]

[[ 2 -1 0]
[ 1 5 -1]
[ 2 -1 0]]
< /code>

Der Wert von Mykernel Clobbers cvkernel. Ich denke, es gibt einen unbeabsichtigten Anruf (Pass-by-Reference?), Aber ich bin mir nicht sicher, warum. < /p>

Wenn ich die Funktion leicht unterschiedlich definiere < /p>

def changeValue2(kernel):
kernel=kernel + 2
return kernel
< /code>

Dann bleibt Cvkernel unberührt < /p>

[[ 0 -1 0]
[-1 5 -1]
[ 0 -1 0]]

[[2 1 2]
[1 7 1]
[2 1 2]]

[[ 0 -1 0]
[-1 5 -1]
[ 0 -1 0]]
< /code>

Was ist hier los? 2, die ID von Mykernel und Cvkernel sind gleich. < /p>

id of myKernel 139994865303344
myKernel
[[ 0 -1 0]
[-1 5 -1]
[ 0 -1 0]]
id of CVKernel 139994865303344
CVKernel
[[ 0 -1 0]
[-1 5 -1]
[ 0 -1 0]]

**call made to changeValue2**

id of myKernel 139994865303344
myKernel
[[ 0 -1 0]
[-1 5 -1]
[ 0 -1 0]]
id of CVKernel 139994865303344
CVKernel
[[ 0 -1 0]
[-1 5 -1]
[ 0 -1 0]]
output a
[[2 1 2]
[1 7 1]
[2 1 2]]
< /code>

Sollte die ID jeder Variablen nicht anders sein, wenn sie unterschiedliche Instanzen sind? < /p>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post