Python передает аргументы по ссылке на объект, точно так же как java, а не по ссылке на переменную. Когда вы присваиваете локальной переменной (включая аргумент) новое значение, вы изменяете только локальную переменную, ничего больше (не путайте это с вызовом мутаторов или присваиванием ATTRIBUTES объектов: мы говорим о присваиваниях на голые имена).
Предпочтительным решением в Python, как правило, является возвращение нескольких значений, сколько вам нужно, и назначение их соответствующим образом в вызывающей программе. Таким образом, deletemin будет возвращать два значения: текущий returnval и измененный узел, и вызывающая сторона назначит последнее по мере необходимости. I.e.:
def DELETEMIN( A ):
if A.leftchild is None:
return A.element, A.rightchild
else:
return DELETEMIN( A.leftchild )
и в вызывающем абоненте, где у вас ранее было foo = DELETEMIN( bar )
, вы использовали бы вместо
foo, bar = DELETEMIN( bar )
Странная заглавная буква и пробел в скобках, кстати, но это другая проблема; -).
Нет способа получить «указатель или ссылку на голое имя вызывающего» (в Python или Java) так, как вы могли бы, например, в C или C ++. Существуют и другие альтернативные подходы, но они требуют других схем, чем вы предпочитаете, поэтому я рекомендую подход с несколькими возвращаемыми значениями, как указано здесь.