首页 > 编程语言 >python的浅复制

python的浅复制

时间:2024-07-16 21:10:29浏览次数:19  
标签:index python icol global col 复制 id left

天天用着python写代码,但是其实很多东西原理都不是很清楚,还是得知其所以然,否则处处踩坑

关键词:递归、列表、set,边遍历边修改

边遍历边修改是一件很危险的行为,小白无知,竟然大胆的使用了,还莫名其妙work了,然后进入了细致的分析。
第一种情况

def backtracing(index):
    global col_left
    print("global",id(col_left))
    if index>3:
        return 
    else:
        for icol in col_left:
            print("index",index)
            print("icol",icol)
            print("col_left",col_left)
            print("first_id",id(col_left))
            col_left = [j for j in col_left if j!=icol]
            print("col_left",col_left)
            print("second_id",id(col_left))
                
            backtracing(index+1)
    
global col_left
col_left = []
col_left.append(0)
col_left.append(1)
col_left.append(2)
backtracing(0)

结果,可以看到,虽然边遍历,边修改列表,但是不影响第一次的循环

global 2191769569536
index 0
icol 0
col_left [0, 1, 2]
first_id 2191769569536
col_left [1, 2]
second_id 2191769379904
global 2191769379904
index 1
icol 1
col_left [1, 2]
first_id 2191769379904
col_left [2]
second_id 2191769373504
global 2191769373504
index 2
icol 2
col_left [2]
first_id 2191769373504
col_left []
second_id 2191769569280
global 2191769569280
index 1
icol 2
col_left []
first_id 2191769569280
col_left []
second_id 2191769373504
global 2191769373504
index 0
icol 1
col_left []
first_id 2191769373504
col_left []
second_id 2191769379904
global 2191769379904
index 0
icol 2
col_left []
first_id 2191769379904
col_left []
second_id 2191769373504
global 2191769373504

这么牛的代码我都不知道怎么写出来的,既设置了global变量,还在循环里面col_left = [j for j in col_left if j!=icol]不停地复制给一个新的变量。作为一个骚操作的案例吧。
前向操作看懂了,大概就是每次改变都赋予了一个新的地址,所以原来地址的值并没有改变,但是反向操作没看懂,看起来是个堆栈操作,暂时不管,可能涉及更底层的原理了。

总之:千万别边遍历边修改。

标签:index,python,icol,global,col,复制,id,left
From: https://www.cnblogs.com/JulieBaker1/p/18306101

相关文章

  • PYTHON用时变马尔可夫区制转换(MARKOV REGIME SWITCHING)自回归模型分析经济时间序列|附
    全文下载链接:http://tecdat.cn/?p=22617最近我们被客户要求撰写关于MRS的研究报告,包括一些图形和统计输出。本文提供了一个在统计模型中使用马可夫转换模型模型的例子,来复现Kim和Nelson(1999)中提出的一些结果。它应用了Hamilton(1989)的滤波器和Kim(1994)的平滑器  %matplot......
  • MySQL主从复制过程
    1、主库操作:修改数据库配置文件liunx的my.cnf文件;windows系统的my.ini文件[mysqld]#最大链接数max_connections=1000#主库----start---同一局域网内注意要唯一server-id=100#开启二进制日志功能,可以随便取(关键)log-bin=mysql-bin#记录的数据库(多数据库用逗号......
  • 十天学会Python——第6天:面向对象
    1面向对象1.1类和对象(用类创建对象)类的语法:class类名():执行的代码对象的语法:对象名=类名()classWasher(): #定义类defwash(self): print("可以洗衣服")print(self) #返回结果是跟下面gree的地址一样gree1=Washer()......
  • 深入解析 Python 文件操作利器 —— shutil
    在Python编程中,文件操作是一个常见且重要的任务。无论是复制文件、移动文件还是压缩文件,Python都提供了强大的库来简化这些操作。其中,shutil库无疑是文件操作的得力助手。本文将深入探讨shutil库的各种功能,包括文件复制、内容覆盖、文件移动和重命名、文件删除、文件......
  • 【已解决】完美解决Python2操作中 文名文件乱码 问题:深入解析与策略
    【已解决】完美解决Python2操作中文名文件乱码问题:深入解析与策略亲测有效一、乱码问题的根源剖析二、优雅处理乱码问题的策略1.统一编码:2.正确处理文件路径:3.异常处理:4.环境适配:三、示例代码与最佳实践四、扩展应用与高级技巧五、总结与展望一、......
  • python 基础知识点(一)
    1.Python可以将一条长语句分成多行显示的续行符号是 \2.缩进可以用tab键实现,也可以用多个空格实现3.在Python中,使用缩进对齐来标记语句块4.在Python中,使用缩进对齐来体现代码之间的逻辑关系。5.严格的缩进可以约束程序结构,可以多层缩进6.Python中......
  • python-B树
    B树B树1.节点作为子节点2.列表作为子节点可扩展多阶B树"""B树:拥有最多子节点的节点的子节点数列称为B树的阶B树是一颗多路查找树,满足以下条件:1.定义任意非叶节点最多只有M个子节点,且M>22.根节点的子节点数为[2,M]3.除根节点以......
  • python 基础之 scrapy 当当数据一演示
    Items程序importscrapyclassDangdangItem(scrapy.Item):#definethefieldsforyouritemherelike:#name=scrapy.Field()src=scrapy.Field()name=scrapy.Field()price=scrapy.Field()spider程序importscrapyclassDangSpider(......
  • 量化交易:如何在QMT中运行Python策略并在VSCode中高效调试?
    哈喽,大家好,我是木头左!为何选择QMT和VSCode进行量化策略开发?在量化交易的世界里,选择正确的工具与拥有优秀的策略同等重要。调用用VisualStudioCode(简称VSCode)或pycharm,方式都差不多。结合QMT的数据处理能力和VSCode的便捷调试功能,可以极大地提高量化策略的开发效率和质量。......
  • 第十一章Python 函数
    定义一个函数你可以定义一个由自己想要功能的函数,以下是简单的规则:函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。函......