拷贝

python深浅拷贝

白昼怎懂夜的黑 提交于 2020-04-08 08:30:10
int, float,str, tuple都是不可变对象, dic,set,list属于可变对象。 可变,是指内存中的值,不是指地址。 1 浅拷贝 拷贝规则: 如果被拷贝对象是不可变对象,则不会生成新的对象 如果被拷贝对象是可变对象,则会生成新的对象,但是只会对可变对象最外层进行拷贝 import copy a = 4343.23 b = copy.copy(a) print(id(a)) print(id(b))    上面的代码对一个float类型的数据进行了浅拷贝,根据规则,不会生成新的对象,因此a,b两个变量的内存地址是相同的。 下面是一个可变对象的拷贝示例 import copy a = [1, [1]] b = copy.copy(a) print(id(a), id(b)) print(id(a[1]), id(b[1]))    程序输出结果是 4739120648 4387519880 4739160904 4739160904    a和b的内存地址是不相同的,说明生成了一个新的数据,但由于是浅拷贝,因此列表里的元素并不进行拷贝,只对最外层进行了拷贝。 通过对内存的观察,我们可以更清楚了解浅拷贝的过程,下图是浅拷贝之前的内存示意图 浅拷贝发生之后,内存变成如下图所示 为了便于识别,我特地将代表引用的线条加粗并加上颜色来区分,通过对比浅拷贝前后的示意图,你可以看到

ddrescue重建损坏磁盘

天涯浪子 提交于 2020-04-07 05:48:50
比较古老的硬盘,经常会出现读取错误。用DDRESCUE备份毁坏磁盘,然后尝试修复备份。 dd_rescue的好处 想象一下, 你的某个分区失效, 存在一些硬错误, 你不会想继续写所有数据到这块硬盘. 这时候需要把上面数据拷贝出来. 然而, 通常情况下, 你不能访问文件, 因为文件系统已损坏. 目前, 你可能会拷贝整个分区到一个文件, 或烧入到一个CD-Rom, 这样将不再丢失所有数据. 你也能创建一个loop设备, 使用fsck修复损坏的分区, 然后访问上面的数据. 在Un*x系统上使用cat或dd拷贝损坏分区将会失败, 因为他们遇见错误后会终止拷贝. 而dd_rescue将尝试从坏扇区读出数据, 然后继续下面的扇区. 输出文件(output file)会存在有一些错误. 你能通过写入日志文件看到这些错误的位置. 当遇见错误的时候, dd_rescue的数据丢失率是非常低的. 如果你终止当前拷贝, 你不会丢失所有数据. 可在所有地方继续. 输出文件将不断被填充, 而不像其他Un*x工具会有截端. 如果你的分区有一个坏扇区, 你能考虑从两边拷贝, 这将是个不错的主意.两个块大小是个不错的优化, 更大的块将有更好的优化效果. 不过在硬盘发生错误的情况下, 你想恢复的是每个扇区上的数据. 所以harbs最佳设置成硬件扇区大小(通常是512字节), softbs数值会大一些, 缺省是16K

C++之保护和私有构造函数与析构函数

落花浮王杯 提交于 2020-04-06 19:07:58
原文: http://blog.chinaunix.net/uid-22312037-id-3811654.html 参考: http://blog.sina.com.cn/s/blog_4c4d6e740100upwp.html 一、构造函数 1、保护 构造函数定义为protected后,就意味着你不能在类的外部构造对象了,而只能在外部构造该类的子类的对象,比如: class Base { protected: Base() {} ... }; class Derived : public Base { public: Derived() {} ... }; Base b; //error Derived d; //ok 2、私有 构造函数定义为private后,意味着不仅仅不能在类的外部构造对象了,而且也不能在外部构造该类的子类的对象了,只能通过类的static静态函数来访问类的内部定义的对象,单件singleton模式就是私有构造函数的典型实例: class CLog { private: CLog() {}; public: ~CLog() {}; public: static CLog* GetInstance() { if (NULL == m_sopLogInstance) { CLock oInstanceLock; oInstanceLock.Lock(); if

HBase中的备份和故障恢复方法

不打扰是莪最后的温柔 提交于 2020-04-06 12:43:19
本文将对Apache HBase可用的数据备份机制和大量数据的故障恢复/容灾机制做简要介绍。 随着HBase在重要的商业系统中应用的大量添加,很多企业须要通过对它们的HBase集群建立健壮的备份和故障恢复(backup and disaster recovery, BDR)机制来保证它们的企业(数据)资产。 HBase和Apache Hadoop系统提供了很多内置的机制,能够高速而轻松的完毕PB级数据的备份和恢复工作。 在这篇文章中,你将会对在HBase中可用的数据备份机制有一个高层次的简要了解,而且知道多种数据恢复/容灾机制。在阅读了这篇文章之后,你应该能对你的业务须要那种BDR策略有了自己的推断。 你也应该明确各种机制各自的优缺点(适用于CDH 4.3.0/HBase 0.94.6及更高版本号)。 备份 HBase是一个基于LSM树(log-structured merge-tree)的分布式数据存储系统,它使用复杂的内部机制确保数据准确性、一致性、多版本号等。因此。你怎样获取数十个region server在HDFS和内存中的存储的众多HFile文件、WALs(Write-Ahead-Logs)的一致的数据备份? 让我们从最小的破坏性,最小的数据占用空间,最小的性能要求机制和工作方式到最具破坏性的逐一讲述: Snapshots Replication Export

高级必问:Linux 中的零拷贝技术是什么?

南笙酒味 提交于 2020-04-05 22:57:05
作者:卡巴拉的树 https://www.jianshu.com/p/fad3339e3448 正文 本文探讨Linux中 主要的几种零拷贝技术 以及零拷贝技术 适用的场景 。为了迅速建立起零拷贝的概念,我们拿一个常用的场景进行引入: 01 引文 在写一个服务端程序时(Web Server或者文件服务器),文件下载是一个基本功能。这时候服务端的任务是:将服务端主机磁盘中的文件不做修改地从已连接的socket发出去,我们通常用下面的代码完成: while((n = read(diskfd, buf, BUF_SIZE)) > 0) write(sockfd, buf , n); 基本操作就是循环的从磁盘读入文件内容到缓冲区,再将缓冲区的内容发送到socket。但是由于Linux的I/O操作默认是缓冲I/O。这里面主要使用的也就是read和write两个系统调用,我们并不知道操作系统在其中做了什么。实际上在以上I/O操作中,发生了多次的数据拷贝。 当应用程序访问某块数据时,操作系统首先会检查,是不是最近访问过此文件,文件内容是否缓存在内核缓冲区,如果是,操作系统则直接根据read系统调用提供的buf地址,将内核缓冲区的内容拷贝到buf所指定的用户空间缓冲区中去。如果不是,操作系统则首先将磁盘上的数据拷贝的内核缓冲区,这一步目前主要依靠DMA来传输

深浅拷贝

北慕城南 提交于 2020-04-04 15:19:28
1. = 没有创建新对象, 只是把内存地址进行了复制 2. 浅拷贝 lst.copy() 只拷贝第一层. 3. 深拷贝 import copy copy.deepcopy() 会把对象内部的所有内容进行拷贝 # # 从上到下只有一个列表被创建 # lst1 = ["胡辣汤", "灌汤包", "油泼面", "麻辣香锅"] # lst2 = lst1 # 并没有产生新对象. 只是一个指向(内存地址)的赋值 # print(id(lst1)) # print(id(lst2)) # # lst1.append("葫芦娃") # print(lst1) # print(lst2) # lst1 = ["胡辣汤", "灌汤包", "油泼面", "麻辣香锅"] # lst2 = lst1.copy() # 拷贝, 抄作业, 可以帮我们创建新的对象,和原来长的一模一样, 浅拷贝 # # print(id(lst1)) # print(id(lst2)) # # lst1.append("葫芦娃") # print(lst1) # print(lst2) # lst1 = ["胡辣汤", "灌汤包", "油泼面", "麻辣香锅", ["长白山", "白洋淀", "黄鹤楼"]] # lst2 = lst1.copy() # 浅拷贝. 只拷贝第一层内容 # # print(id(lst1)) #

python的小数据池和深浅拷贝

自古美人都是妖i 提交于 2020-04-03 10:34:57
小数据池 一种数据缓存机制,也称驻留机制 在同一代码块,相同的值不会开辟新的内存 特殊字符除外 小数据池只针对:在控制台时! 数字 :-5到256间的整数会被缓存 布尔值:都会缓存8 字符串 小于等于一个字符时会缓存 超过一个字母但是只有下划线,字母,数字组成也会缓存 如果字符串乘法,那小于等于20个就会缓存,超过则开辟新的内存 手动缓存,需要调用工具 from sys import intern a=intern("alex@qq.com"*5) b=intern("alex@qq.com"*5) a is b #True 在同一.py文件或pycharm中也有自己的小数据池,也是只会缓存str ,int ,bool类型, 但是小数据池会比外面的大. 数字都会缓存,运算的结果在-5到256之间会缓存,大于就不会缓存 默认的字符串都会缓存,如果执行乘法则与上面结论一致 布尔值默认缓存 深浅拷贝 a=[a,b,[a,b],c] b=a#此时b指向的是a的内存地址,改动数值两个都变,若将a重新赋值则b不会改变,还是指向原先地址 a=a[:]#切片是浅拷贝 import copy c=copy.copy(a)#浅拷贝,若a更改第一层的元素c不受影响,a若更改可变因素里的内容c也跟着改变 d=copy.deepcopy(a)#深拷贝,完全不受a的影响 来源: https://www

Python学习之-- IO 操作

浪尽此生 提交于 2020-04-03 04:09:46
阻塞IO / 非阻塞IO /IO多路复用 / 异步IO 说明:同步IO包含(阻塞IO / 非阻塞IO /IO多路复用),因为他们有个共同特性就是都需要内核态到用户态的一个等待。 基本概念解释,环境限定为linux: 1:用户空间和内存空间 首先操作系统是采用虚拟存储器,就32位系统来说,它的虚拟存储空间是2的32次方==4G,操作系统的核心是内核,它是独立于普通的应用程序,它可以访问受保护的内存空间,底层硬件等,为保障用户进程不能直接操作内核,操作系统将虚拟存储空间分为2部分,分为:内核空间和用户空间,内核空间将最高的1G字节(寻址:0xC0000000到0xFFFFFFFF)分配使用,最低的3G字节分配给用户空间,供进程使用。 2:进程切换 也就类似线程切换,由内核将正在CPU上执行的进程挂起,然后恢复以前挂起的进程,这就是进程切换。所以进程都是在操作系统的内核的支持下运行的。与内核紧密相连 从一个进程切换到另一个进程,运行过程如下: 1:保存处理机上下文,包括程序计数器和寄存器 2:更新PCB信息 3:把进程的PCB移入相应的队列, 4:选择另一个进程执行,并更新其PCB 5:更新内存管理的数据结构 6:恢复处理机上下文 3:进程的阻塞 当正在执行的进程运行期间,由于所期待的事情未发生,如(请求资源失败,某种操作的完成,新数据尚未到达等),则由系统自动执行阻塞原语

java拷贝文件夹和删除文件夹

生来就可爱ヽ(ⅴ<●) 提交于 2020-04-02 13:40:09
1.文件夹的拷贝 public void copy(File src, File dest) throws IOException {   if (dest.isFile()) {     throw new RuntimeException(dest + "不是文件夹");   }   File file = new File(dest.getPath() + "/" + src.getName());   if (src.isFile()) {     FileInputStream fis = new FileInputStream(src);     BufferedInputStream bis = new BufferedInputStream(fis);     FileOutputStream fos = new FileOutputStream(file);     BufferedOutputStream bos = new BufferedOutputStream(fos);     byte[] bytes = new byte[1024];     int len;     while ((len = bis.read(bytes)) != -1) {       bos.write(bytes, 0, len);     }     bis.close(