python append 與淺拷貝

2021-07-29 17:17:45 字數 1435 閱讀 5872

在做leetcode的第39題的時候,看到網上乙個用遞迴的解法,很簡潔。於是重寫了一遍。

class solution(object):

def combinationsum(self, candidates, target):

""":type candidates: list[int]

:type target: int

:rtype: list[list[int]]

"""result,temp = ,

self.combinationsumrecu(sorted(candidates),result,0,temp,target)

return result

def combinationsumrecu(self, candidates, result, start, temp, target):

if target == 0:

while start < len(candidates) and candidates[start]<=target:

self.combinationsumrecu(candidates, result, start, temp,target-candidates[start])

temp.pop()

start += 1

if __name__ == '__main__':

print solution().combinationsum([2,3,6,7],7)

沒改前,結果是:

[[2, 2, 3], [7]]

[, ]

為什麼會這樣呢?list在這裡做了什麼工作呢?

首先,為了驗證temp每步都是乙個list,我們是使用type()函式檢視它的型別。

if target == 0:

print type(temp),temp,result

輸出為:

[2, 2, 3]

[7] [[7]]

可以看出,temp都是list。但是第二個result的結果不正確

可以將正確的值輸出對比一下

if target == 0:

print type(temp),temp,result

輸出為:

[2, 2, 3]

[7] [[2, 2, 3]]

可以看出,本來第二個result應該為[[2,2,3]],結果變成了[[7]].

舉個例子驗證一下:

a = [1,2]

b = [3,4]

print a

b.pop()

print a

輸出結果為:

[1, 2, [3, 4]]

[1, 2, [3]]

除了用list(temp)以外,還可以用temp[:]進行深拷貝。

對python append 與淺拷貝的例項講解

在做leetcode的第39題的時候,看到網上乙個用遞迴的解法,很簡潔。於是重寫了一遍。class solution object def combinationsum self,candidates,target type candidates list int type target int r...

js 淺拷貝直接賦值 js的賦值與淺拷貝 深拷貝

昨天翻了下陣列api,看到concat和slice方法,突然想到這個兩個方法是淺拷貝還是深拷貝,結果陷入了死胡同,為什麼mdn文件說是淺拷貝,但進行簡單的操作為什麼能複製成功啊,糾結半天後才弄清原由,原來我一直把賦值和深淺拷貝搞混了。首先不要把引用型別的賦值歸結為淺拷貝,深拷貝和淺拷貝只針對像 ob...

靜態補充CSS型別轉換與JS深拷貝與淺拷貝

常用的塊級元素 常用的塊級block標籤 標題標籤 水平分割線 段落無序列表 有序列表 定義列表 表單 布局標籤 塊級元素特性 常用的內聯 行內inline標籤 鏈結 換行 空標籤,不深究 加粗 傾斜 下劃線 刪除線等文字裝飾標籤 下拉列表 行內元素特性 常用的行內塊級inline block標籤 ...