拷贝

Python基础之小数据池及深浅拷贝

核能气质少年 提交于 2020-01-20 00:31:00
一、小数据池 == (等于) == 官方:判断等号两边的内容是否相同 ​ 白话:判断两个人长得是不是一样 is ​ 官方:判断两边的内容是不是一个 ​ 白话:判断这两个人是不是一个人 a = 10000 b = 10000 print(a == b) is 是通过内存地址进行判断 print(id(a),id(b)) 输出结果 ,内存地址一致 代码块:一个py文件,一个函数,一个模块,一个类,交互模式(终端)下的每一行 先执行代码块,然后小数据池! 代码块机制内容:Python在执行同一个代码块的初始化对象的命令时,会检查是否其值是否已经存在,如果存在,会将其重用。换句话说:执行同一个代码块时,遇到初始化对象的命令时,他会将初始化的这个变量与值存储在一个字典中,在遇到新的变量时,会先在字典中查询记录,如果有同样的记录那么它会重复使用这个字典中的之前的这个值。所以在你给出的例子中,文件执行时(同一个代码块)会把i1、i2两个变量指向同一个对象, 满足缓存机制则他们在内存中只存在一个,即:id相同。 终端中测试的是小数据池缓存机制: ​ 数字: -5 ~ 256 ​ 字符串: ​ 定义时内容(除去中文,特殊符号)长度不限,内容相同,就进行驻留。 ​ python 3. 6解释器字符串进行乘法时(不能有中文和特殊符号),总长度不能超过20 ​ python 3. 7解释器字符串进行乘法时

os、sys和shutil模块

狂风中的少年 提交于 2020-01-19 03:55:31
运行环境:python3 OS模块 :os 模块提供了一个统一的操作系统的接口函数 下面的path指路径的意思 os.stat(file) #查询文件属性操作 os.sep #取代操作系统特定的路径分隔符 os.pathsep #输出用于分割文件路径的字符串 os.linesep #给出当前平台的行终止符。例如,Windows使用'\r\n',Linux使用'\n'而Mac使用'\r' os.name #获取当前用的平台,nt代表windows,posix代表linux os.getcwd())#得到当前工作目录,即当前Python脚本工作的目录路径 os.listdir(path) #获取目录下的所有文件和文件夹,不加参数默认为当前目录 os.mkdir(path) #创建单级目录,如果目录存在则报错 os.makedirs(path) #创建多级目录,可以生成多层递归目录,如果目录存在则报错 os.rmdir(path) #删除一个目录,注意目录下必须为空,有文件则报错 os.removedirs(path) #删除多级目录,可以删除多层递归的空目录,注意目录下必须为空,有文件则报错 os.remove(path)#删除一个文件 os.rename(src,dst) #文件重命名,注意dst(要修改的文件名)必须不存在。 print(__file__) #获取当前文件的相对路径

C++拷贝构造函数(浅拷贝、深拷贝)

一曲冷凌霜 提交于 2020-01-18 23:43:52
下面举一个简单的例子说明对象之间的拷贝(此例中没有自定义拷贝构造函数,在调用拷贝构造函数的时候,编译器会自动生成一个默认的拷贝构造函数,该构造函数完成对象之间的位拷贝) 浅拷贝 : #include<iostream> using namespace std; class CExample { private: int a; public: CExample(int b) { a=b; } void Show() { cout<<a<<endl; } }; int main() { CExample A(100); CExample B=A; B.Show(); return 0; } 输出结果: 100 系统为对象B分配了内存并完成了与对象A的复制过程。形同类型对象是通过拷贝构造函数来完成整个过程的。 自定义构造函数(自定义拷贝构造函数是一种良好的编程风格,他可以组织编译器形成默认的拷贝构造函数,提高源码效率): 示例: #include<iostream> using namespace std; class CExample { private: int a; public: CExample(int b) { a=b; } CExample(const CExample& C) { a=C.a; } void Show() { cout<<a<<endl; } }; int

C++ 智能指针详解

生来就可爱ヽ(ⅴ<●) 提交于 2020-01-18 22:44:49
C++ 智能指针详解 文章目录 C++ 智能指针详解 1. 智能指针能解决什么问题? 2. 智能指针的发展 3. 智能指针 shared_ptr 3.1 创建shared_ptr实例 3.2 访问所指对象 3.3 拷贝和赋值操作 3.4 检查引用计数 3.5 reset 函数 4. 智能指针 weak_ptr 4.1 weak_ptr 的基本用法 4.2 weak_ptr 的相关函数 4.3 weak_ptr 总结 5. 智能指针 unique_ptr 6. 智能指针注意事项 1. 智能指针能解决什么问题? 在C++中,动态内存的管理是通过一对运算符来完成的: new ,在动态内存中为对象分配空间并返回一个指向该对象的指针,可以选择对对象进行初始化; delete ,接受一个动态对象的指针,销毁该对象,并释放与之关联的内存。 动态内存的使用很容易出问题,因为确保在正确的时间释放内存是极其困难的。有时会忘记释放内存,在这种情况下会产生 内存泄露 ;有时在尚有指针引用内存的情况下就释放了它,在这种情况下就会产生引用非法内存的指针。 为了更容易(同时也更安全)地使用动态内存,C++11标准库提供智能指针(smart pointer)类型来管理动态对象。 智能指针的行为类似常规指针,重要的区别是它负责 自动释放所指的对象 。 智能指针是模板类而不是指针 。类似vector

java学习笔记之IO编程—目录和文件的拷贝

萝らか妹 提交于 2020-01-18 22:19:30
进行文件或目录的拷贝时,要先判断处理对象是文件还是目录,如果是文件则直接拷贝,如果是目录还需要拷贝它的子目录及其文件,这就需要递归处理了 import java.io.*; class FileUtil{ private File srcFile; private File desFile; public FileUtil(String src, String des) { this(new File(src),new File(des)); } public FileUtil(File srcFile, File desFile) { this.srcFile = srcFile; this.desFile = desFile; } public boolean copy() throws Exception { if(!srcFile.exists()) { System.out.println("源文件不存在,文件拷贝失败"); return false; } return this.copyFileImpl(srcFile, desFile);//进行文件拷贝 } public boolean copyDir() throws Exception { this.copyImpl(this.srcFile);//对目录用递归处理 return true; } public

Python入门-模块2(sys模块、shutil 模块)

北城余情 提交于 2020-01-18 15:57:31
sys模块: sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0) sys.version 获取Python解释程序的版本信息 sys.maxint 最大的Int值 sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 sys.platform 返回操作系统平台名称 sys.stdout.write('please:') #标准输出 , 引出进度条的例子, 注,在py3上不行,可以用print代替 val = sys.stdin.readline()[:-1] #标准输入 sys.getrecursionlimit() #获取最大递归层数 sys.setrecursionlimit(1200) #设置最大递归层数 sys.getdefaultencoding() #获取解释器默认编码 sys.getfilesystemencoding #获取内存数据存到文件里的默认编码 shutil 模块: 高级的 文件、文件夹、压缩包 处理模块 shutil.copyfileobj(fsrc, fdst[, length]) 将文件内容拷贝到另一个文件中 import shutil f1 = open("hello.py",'r') f2 = open("hello_new.py",'w')

Java中的clone

旧时模样 提交于 2020-01-18 09:35:50
Java中对象的创建 使用new操作符创建一个对象 使用clone方法复制一个对象 这两种方式有什么相同和不同呢? new操作符的本意是分配内存。程序执行到new操作符时, 首先去看new操作符后面的类型,因为知道了类型,才能知道要分配多大的内存空间。分配完内存之后,再调用构造函数,填充对象的各个域,这一步叫做对象的初始化,构造方法返回后,一个对象创建完毕,可以把他的引用(地址)发布到外部,在外部就可以使用这个引用操纵这个对象。 而clone在第一步是和new相似的, 都是分配内存,调用clone方法时,分配的内存和源对象(即调用clone方法的对象)相同,然后再使用原对象中对应的各个域,填充新对象的域, 填充完成之后,clone方法返回,一个新的相同的对象被创建,同样可以把这个新对象的引用发布到外部 。 Java中的Clone clone 顾名思义就是 复制 , 在Java语言中, clone方法被对象调用,所以会复制对象。所谓的复制对象,首先要分配一个和源对象同样大小的空间,在这个空间中创建一个新的对象 复制对象 or 复制引用 Person p = new Person(23, "张三"); Person p1 = p; System.out.println(p); System.out.println(p1); 打印结果: com.pansoft.zhangjg

Redis(五)

☆樱花仙子☆ 提交于 2020-01-17 23:37:57
Redis的持久化 Redis 为什么要持久化? Redis 中的数据类型都支持 push/pop、add/remove 及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,Redis 支持各种不同方式的排序。与 Memcached 一样,为了保证效率,数据都是缓存在内存中。 对,数据都是缓存在内存中的,当你重启系统或者关闭系统后,缓存在内存中的数据都会消失殆尽,再也找不回来了。所以,为了让数据能够长期保存,就要将 Redis 放在缓存中的数据做持久化存储。 Redis提供了2种不同形式的持久化方式 RDB(Redis Database) AOF (Append Of File) RDB 在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,它恢复是将快照文件直接读到内存里。 备份如何执行的 Redis会单独创建( fork )一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换 到上次持久化好的文件。整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能如果需要进行大规模数据恢复操作,且对于 数据恢复的完整性不是很敏感,那么RDB方式要比AOF方式更加的高效。RDB的缺点是最后一次持久化后的数据可能丢失(正常退出如shutdown会完整保存)。 关于fork 在Linux程序中

深度拷贝与浅度拷贝

那年仲夏 提交于 2020-01-17 23:05:21
深度拷贝 与 浅度拷贝 的区别主要在于有没有为拷贝出的新对象在堆中重新分配一块内存区域。 浅度拷贝 : 直接赋值,拷贝的只是原始对象的引用地址,在堆中仍然共用一块内存。 深度拷贝 : 新对象在堆中重新分配一块内存,所以对新对象的操作不会影响原始对象。 深度拷贝几种方法 1. 使用Java序列化方法 # 想要深拷贝一个对象,常用的方法是序列化为数据流,此方法的前提是对象以及对象中包含的子对象都要继承Serializable接口。 /** * 深层拷贝 - 需要类继承序列化接口 * @param <T> * @param obj * @return * @throws Exception */ public static <T> T copyImplSerializable(T obj) throws Exception { ByteArrayOutputStream baos = null; ObjectOutputStream oos = null; ByteArrayInputStream bais = null; ObjectInputStream ois = null; Object o = null; try { baos = new ByteArrayOutputStream(); oos = new ObjectOutputStream(baos); oos