文章目录
零、从哪里来
记得看这篇文章总结最后,不亏,没看完的话,你会后悔一辈子。
一、先看算法题(回溯法)
给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集。
解集不能包含重复的子集。返回的解集中,子集可以按任意顺序排列。
class Solution:
def subsetsWithDup(self, nums: List[int]) -> List[List[int]]:
results = []
nums.sort() # 去重必须有排序
self.backtracking(nums, 0,[],results)
return results
def backtracking(self,nums, startIndex, path, results):
results.append(path[:])
for i in range(startIndex, len(nums)):
if i >startIndex and nums[i] == nums[i-1]:
continue
path.append(nums[i])
self.backtracking(nums, i+1, path, results)
path.pop()
二、扩展
is操作符用于比较两个对象的身份,即它们是否是同一个对象。在Python中,is实际上是比较两个对象的id()值是否相同。
大多数情况下,id(obj1) == id(obj2)和obj1 is obj2是等价的,因为它们都在检查两个对象是否具有相同的内存地址。然而,存在一些特殊情况,比如Python的整数缓存机制,在这种情况下,is可能会给出不同的结果。Python会缓存一些小范围的整数,因此两个不同的变量可能引用内存中的同一个整数对象。
三、总结
大多数情况下,id(obj1) == id(obj2)和obj1 is obj2是等价的。然而,存在一些特殊情况,比如Python的整数缓存机制,在这种情况下,is可能会给出不同的结果。Python会缓存一些小范围的整数,因此两个不同的变量可能引用内存中的同一个整数对象。
看程序结果就醒(想打 行 字,发现“醒”这个字更加有魅力)了:
>>> a = 1
>>> b = 1
>>> id(a)
2277095401776
>>> id(b)
2277095401776
>>> a is b
True
>>> s = 2566
>>> x = 2566
>>> id(s)
2277132164080
>>> id(x)
2277132164272
>>> s is x
False
标签:nums,Python,results,整数,列表,path,拷贝,id
From: https://blog.csdn.net/weixin_38392612/article/details/137335109