作者typhoonss821 (jeff)
看板Python
标题[问题] append(element+[])
时间Thu Jul 5 10:33:29 2018
大家好
最近在刷leetcode 写到一题给出一组数列 求所有permutations的可能
https://leetcode.com/problems/permutations/description/
我的code是这样的,主体无穷递回的方式求解
class Solution:
def getSolution(self, x):
cach = []
result = []
self.permutations(x, cach, result)
return result
def permutations(self, x, cach, result):
if len(x) == 0:
result.append(cach)
for i in range(len(x)):
cach.append(x[i])
self.permutations(x[:i]+x[i+1:], cach, result)
cach.pop()
但我发现在上色部分append完的result在下一次append前他的值都会自动被改变
而我google了使用一样解法的code,发现只要将append(cach)改成append(cach+[])
这样的输出就不会有值被改变的问题
我查了半天找不到类似的解释 不太知道+[]的用意是什麽
所以来这边请教大家
先谢谢大家的回答了!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 72.229.255.136
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1530758013.A.931.html
1F:→ mikapauli: 复制的意思,或是用cach.copy()、cach[:]、list(cach) 07/05 10:41
2F:→ mikapauli: 、tuple(cach)等都可以。 07/05 10:41
3F:→ typhoonss821: 请问是因为list的mutable性质所以改变cach也会改变 07/05 10:51
4F:→ typhoonss821: 之前的result.append吗? 07/05 10:51
5F:推 Yshuan: 是function的mutable arguments特性 建议避免 07/05 11:23
6F:→ Yshuan: 必须用的话, 最安全就是caller或callee去做copy 07/05 11:24
7F:→ typhoonss821: 非常感谢两位的回答 07/05 12:31
8F:→ pmove: 原来+[]是这个意思,之前比较常见的是cach[:] 07/05 12:52
9F:推 handsomeLin: 因为你塞同一个reference进去 在result里的结果会都 07/05 23:02
10F:→ handsomeLin: 一样 相当於copy没错 07/05 23:02