首页 > 其他分享 >浅复制 深复制

浅复制 深复制

时间:2023-04-29 16:22:31浏览次数:28  
标签:passengers l1 复制 l2 address print id

复制列表(或多数内置的可变集合)最简单的方式是使用内置的类型构造方法。如l2 = list( l1 )

对列表和其他可变序列来说,还能使用简洁的l2 = l1[ : ]语句创建副本。

然而,构造方法或[:]做的是浅复制(即复制了最外层容器,副本中的元素是源容器中元素的引用)。如果所有元素都是不可变的,那么这样没有问题,还能节省内存。但是,如果有可变的元素,可能就会导致意想不到的问题。

 深复制(即副本不共享内部对象的引用)。copy模块提供的deepcopy和copy函数能为任意对象做深复制和浅复制。

 

import copy

copy.copy()
copy.deepcopy()

 

l1= [3,[66,55,44], (7,8,9)]
l2 = list(l1)
l3 = l1

print("l2 is l1:", l2 is l1)
print('l3 is l1:', l3 is l1)

print(f'''      l1[0] address: {id(l1[0])}, l2[0] address:{id(l2[0])} 
      l1[1] address: {id(l1[1])}, l2[1] address:{id(l2[1])}
      l1[2] address: {id(l1[2])}, l2[2] address:{id(l2[2])}''')
      
      
 
l1.append(100)
l1[1].remove(55)

print("\nl1追加元素100对l2没有影响,但移除l1[1]中的元素55对l2有影响,因为它们指向同一个地址:")
print(f' l1 content:{l1}\n l2 content:{l2}')

print("\nl2[1]添加[33,22]:")
l2[1] += [33,22]
print(f' l1 content:{l1}\n l2 content:{l2}')

#l1和l2,谁对[1]中的列表进行修改,相应的都会在另一方看到对应的修改



print("\nl2[2] += (10,11)修改后:")
l2[2] += (10,11)
print(f' l1 content:{l1}\n l2 content:{l2}')

print("\n元组使用+=会创建一个新元组,可以看到现在l1[2]和l2[2]位置上不是同一个对象:")
print(f'''      l1[0] address: {id(l1[0])}, l2[0] address:{id(l2[0])} 
      l1[1] address: {id(l1[1])}, l2[1] address:{id(l2[1])}
      l1[2] address: {id(l1[2])}, l2[2] address:{id(l2[2])}''')

运行结果:

 

 

import copy


class Bus:
    def __init__(self, passengers = None):
        if passengers is None:
            self.passengers = []
        else:
            self.passengers = list(passengers)
            
    
    def pick(self, name):
        self.passengers.append(name)
    
    def drop(self, name):
        self.passengers.remove(name)
        


bus1 = Bus(['Alice', 'Bill', 'Claire', 'David'])
bus2 = copy.copy(bus1)
bus3 = copy.deepcopy(bus1)

print(id(bus1), id(bus2), id(bus3))
print(id(bus1.passengers), id(bus2.passengers), id(bus3.passengers))


bus4 = Bus(['Alice', 'Bill', 'Claire', 'David'])
print(id(bus4), id(bus4.passengers))

运行结果:

 

标签:passengers,l1,复制,l2,address,print,id
From: https://www.cnblogs.com/bravesunforever/p/17363804.html

相关文章

  • cp复制软连接
    在Linux中,使用cp命令复制软链接时,会根据命令行参数的不同而产生不同的结果:如果使用cp-L命令,cp会复制软链接指向的文件,而不是软链接本身。这个选项强制cp遵循软链接指向的路径,而不是复制软链接。如果使用cp-P命令,cp会复制软链接本身,而不是软链接指向的文件。这个选项使cp复制......
  • Performance_schema中的主从复制系列表总结
    主从半同步复制是目前用得最多的MySQL复制方案,日常工作中我们一般通过showslave status语句查看当前复制过程中状态信息,基本上能满足大多数场景下的需求。Performance_schema中提供了16个关于复制的监控表(包括组复制、过滤复制等,这里我们先不讨论),showslavestatus中的大多数信......
  • redis之持久化方案,主从复制,哨兵高可用,集群原理及搭建,缓存优化
    目录redis之持久化方案,主从复制,哨兵高可用,集群原理及搭建,缓存优化昨日内容回顾今日内容详细1持久化方案1.1RDB1.2aof方案1.3混合持久化2主从复制原理和方案3哨兵高可用4集群原理及搭建4.1集群搭建4.2集群扩容4.3集群缩容5缓存优化5.1redis缓存更新策略5.2缓存穿透击......
  • 本地图文直接复制到dedecms编辑器中
    ​ 图片的复制无非有两种方法,一种是图片直接上传到服务器,另外一种转换成二进制流的base64码目前限chrome浏览器使用首先以um-editor的二进制流保存为例:打开umeditor.js,找到UM.plugins['autoupload'],然后找到autoUploadHandler方法,注释掉其中的代码。加入下面的代码://判断剪......
  • 本地图文直接复制到动易CMS编辑器中
    ​ 如何做到ueditor批量上传word图片?1、前端引用代码<!DOCTYPE html PUBLIC "-//W3C//DTDXHTML1.0Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head>......
  • [leetcode]复制带随机指针的链表
    力扣链接思路一:遍历链表,将链表结点复制下来,控制随机指针,去找对应的第几个(相对位置)进行链接.思路二:以时间换空间,创建两个指针数组,分别存放两个链表中结点的地址,直接可以在指针数组中找到结点该方法比上面的方法更优,但是时间复杂度依旧很高,但是还是达不到O(N)思路三:1.拷......
  • win10下复制ssh公钥到linux
    win10端已经生成了ssh的公钥。在powershell中使用ssh-copy-id命令,提示如下:ssh-copy-id:Theterm'ssh-copy-id'isnotrecognizedasanameofacmdlet,function,scriptfile,orexecutableprogram.Checkthespellingofthename,orifapathwasincluded,verify......
  • 利用xtcbackup做mysql的级联复制
    从库进行数据的xtcbackup备份innobackupex--defaults-file=/etc/my.cnf--user=backup--password=Admin123--stream=tar/backup_dir/tmp/|gzip>/backup_dir/tmp/mysql02_`hostname`_`date+%Y%m%d%H`.tar.gz备份完成后,将文件scp到灾备端。解压缩文件到/mysql/backup......
  • MySQL主从复制详解
    主从复制原理+实操什么是MySQL主从复制?​MySQL主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。MySQL默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或......
  • MySQL主从复制搭配SharingSphere踩大坑记录
    报错内容:Causedby:java.util.NoSuchElementException:Novaluebound点击查看原始错误代码ErrorstartingApplicationContext.Todisplaytheconditionsreportre-runyourapplicationwith'debug'enabled.2023-04-2616:34:48.270ERROR22584---[......