首页 > 其他分享 >理解列表的引用和浅拷贝,体会path和path[:]的不同

理解列表的引用和浅拷贝,体会path和path[:]的不同

时间:2024-04-03 11:02:29浏览次数:9  
标签:nums Python results 整数 列表 path 拷贝 id

文章目录

零、从哪里来

引用与浅拷贝与深拷贝

记得看这篇文章总结最后,不亏,没看完的话,你会后悔一辈子。

一、先看算法题(回溯法)

给你一个整数数组 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

相关文章

  • java中获取项目路径包路径域名classpath路径buildPath路径
    /** *获取项目路径 *@returnnull或项目路径 *@throwsIOException */ publicstaticStringgetPojectPath(){ Filedirectory=newFile("");//参数为空 try{ returndirectory.getCanonicalPath(); }catch(IOExceptione){ e.printStackT......
  • 列表和字典的内置方法
    1列表的内置方法gf_name_list=['高圆圆','刘亦菲','赵丽颖','范冰冰','李嘉欣']一、增(1)列表最后位置追加一个值gf_name_list.append("橘梨纱")(2)向列表任意位置插入一个值gf_name_list.insert(1,"橘梨纱")(3)扩展列表gf_name_list.extend([&......
  • 07字符串内置方法_列表的内置方法_列表操作_字典的内置方法
    【一】字符串内置方法【1】find方法name="dreamHello"#默认是从左向右找并且返回当前字符在字符串内部的索引坐标print(name.find('d'))#0#默认只能找一次,找到了就不会再找下去了print(name.find('e'))#2#可以指定寻找的区间print(name.find('e',5,-1))#7......
  • Python笔记----列表(List)【附代码】
    1.列表介绍   列表既是Python中最基本的数据结构又是最常用的数据类型   创造列表很简单,只要把数据用中括号括起来,数据之间用逗号隔开就可以了。2.列表的创建   列表的数据项不需要具有相同的类型,不同数据类型都可以装,可以存储的信息非常丰富3.列表......
  • WPF Storyboary DoubleAnimationUsingPath PathGeometry
    <Windowx:Class="WpfApp30.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.......
  • 类的函数成员(三):拷贝构造函数
    一.什么是拷贝构造函数?1.1概念        同一个类的对象在内存中有完全相同的结构,如果作为一个整体进行复制或称拷贝是完全可行的。这个拷贝过程只需要拷贝数据成员,而函数成员是共用的(只有一份拷贝)。        在建立对象时可用同一类的另一个对象来初始化该对......
  • python数据容器之列表
    python数据容器-列表1、列表列表的定义语法:[元素1,元素2,元素3,…]列表内的每一个数据,称之为元素以[]作为标识列表内每一个元素之间用,逗号隔开注意:列表可以一次存储多个数据,且可以为不同的数据类型,支持嵌套列表的特点:可以容纳多个元素,上限为2**6......
  • 列表+字典内置方法
    字符串查找​ .find('字符',起始查找位,结束查找位)默认从左往右找,默认值找一次,从右向左找可以用rfind,找到返回索引位置,找不到输出-1.index('字符',起始查找位,结束查找位)默认从左往右找,默认值找一次,从右向左找可以用rindex,找到返回索引位置,找不到则报错.count('字符')默认......
  • Windows10基于docker的mysql8的备份和拷贝文件到宿主机
    Windows10基于docker的mysql8的备份和拷贝文件到宿主机##环境说明操作系统:windows10docker:v4.25.0mysql:8##进入容器dockerexec-itmysql8/bin/bash ##备份特定数据库mysqldump-uroot-pMm123456jeesite>jeesite.sql ##退出容器 exit ##将备份......
  • 深浅拷贝
    浅拷贝使用方式importcopy#浅拷贝copy.copy()拷贝原则对可变类型对象进行浅拷贝,只做顶层拷贝对不可变类型对象进行浅拷贝,那么不拷贝深拷贝使用方式importcopy#深拷贝copy.deepcopy()拷贝原则对可变类型对象进行深拷贝,除了顶层拷贝,还会......