iT邦幫忙

0

Leetcode 1650 (有個多變數賦值的問題)

各位邦友好,以下連結是題目
https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-tree-iii/

以及我參考Discuss寫出來的code:

"""
class Node:
    def __init__(self, val):
        self.val = val
        self.left = None
        self.right = None
        self.parent = None
"""

        while p.parent:
            p.parent, p = None, p.parent
            
        while q:
            if not q.parent:
                return q
            else:
                q = q.parent

請問各位,p.parent, p = None, p.parent 這樣寫是ok的,但改成 p, p.parent = p.parent, None 就不行了。請問是為什麼呢? 本人查了一些Python多變數賦值的資料,都沒有查到原因。

先謝謝各位熱心的邦友願意看完本人的問題

bill0704 iT邦新手 5 級 ‧ 2021-05-24 15:58:26 檢舉
基於全局鎖(GIL),python的世界裡所有的步驟都是一步一步進行的

所以這裡的多變數賦值是直接依序把記憶體位置指向改變,不是拷貝資料後再重新賦值,所以順序才很重要,你可以看一下這個簡易程式碼:

data,i=["a", "b", "c"],0
i, data[i] = 1, "qqq"
print(i,data)


i, data[i] = 1, "qqq" 將等價於
i=1
data[i]= "qqq"
得到結果會是 1,['a', 'qqq', 'c']
@bill0704 你的答案好像不完全對,因為在a, b = b, a在你的結果中是錯誤的

1 個回答

0
johnsonnnn
iT邦新手 5 級 ‧ 2021-05-25 01:27:17

我看到這篇蠻感興趣的就試著推論 python 多變數賦值運作方式
文章放在
https://ithelp.ithome.com.tw/articles/10256747
你可以看看,理論上應該是對的。

ffaanngg iT邦新手 5 級 ‧ 2021-05-27 05:41:50 檢舉

謝謝您的回應,抱歉最近較忙,有空再深入閱讀

我要發表回答

立即登入回答