拷贝

深浅拷贝

痴心易碎 提交于 2020-04-02 05:11:46
浅拷贝: 浅拷贝只拷贝一次,浅拷贝只拷贝指针。 import copy copy.copy() #浅拷贝 a1 = 123123 a2 = 123123 print(id(a1)) #查看内存地址 print(id(a2)) #22745648 #22745648 a3 = copy.copy(a1) print(id(a1)) print(id(a3)) #22745648 #内存地址相同 #22745648 深拷贝: 深拷贝拷贝多层,深拷贝可以重新申请空间并将数据复制过来 1 n1 = {'k1':'wu','k2':123,'k3':['alex',456]} 2 n2 = n1 3 print(id(n1)) #39035368 4 print(id(n2)) #39035368 5 n3 = copy.copy(n1) 6 n4 = copy.deepcopy(n1) 7 print(id(n1)) #39035368 8 print(id(n3)) #39295376 9 print(id(n4)) #39035608 10 print(id(n1['k3'])) #46733552 11 print(id(n3['k3'])) #46733552 12 print(id(n4['k3'])) #46731352 13 14 dic = { 15 "cpu":[80,]

shutil模块

独自空忆成欢 提交于 2020-04-01 06:04:04
shutil模块 高级的 文件、文件夹、压缩包 处理模块 shutil.copyfileobj(fsrc, fdst[, length]) 将文件内容拷贝到另一个文件中 1 import shutil 2 3 shutil.copyfileobj(open('old.xml','r'), open('new.xml', 'w')) shutil.copyfile(src, dst) 拷贝文件 1 shutil.copyfile('f1.log', 'f2.log') #目标文件无需存在 shutil.copymode(src, dst) 仅拷贝权限。内容、组、用户均不变 1 shutil.copymode('f1.log', 'f2.log') #目标文件必须存在 shutil.copystat(src, dst) 仅拷贝状态的信息,包括:mode bits, atime, mtime, flags 1 shutil.copystat('f1.log', 'f2.log') #目标文件必须存在 shutil.copy(src, dst) 拷贝文件和权限 1 import shutil 2 3 shutil.copy('f1.log', 'f2.log') shutil.copy2(src, dst) 拷贝文件和状态信息 1 import shutil 2 3 shutil

Python笔记:深浅拷贝

自作多情 提交于 2020-04-01 05:39:56
  1.赋值操作两者是同一数据,其内存地址一样。适用于list、dict、set数据类型。   2.copy是浅拷贝,只能拷贝嵌套数据的第一层数据,嵌套的数据与赋值操作相同,其内存地址一样,当一个被更改,其他的拷贝也会跟着变。   3.deepcopy是深拷贝,使用深拷贝需要引入copy库,深拷贝是将元素内部的所有元素完全进行拷贝赋值,即使是嵌套数据,其嵌套的数据也是可以复制的,所以原数据改变,拷贝的数据不会跟着变。 来源: https://www.cnblogs.com/heshike/p/9432239.html

字符、字符串函数

大城市里の小女人 提交于 2020-03-31 19:07:02
头文件 #include<string.h> 字符串函数 字符串长度函数 strlen(str) (返回值是实际字符串长度不包括‘\0‘) 字符串拷贝函数 strcyp(dest, src) (将src拷贝到dest,'\0' 也一同拷贝) strncpy(s1, s2, n) (复制指定长度字符串) #include<stdio.h> #include<string.h> int main() { char s1[] = "1234567"; char s2[] = "abc"; puts(strncpy(s1, s2, 2)); return 0; } 在屏幕上打印出:ab34567 字符串连接函数 strcat(dest, src) (将src字符串连接到dest之后,dest原有的 '\0' 被覆盖,src的 '\0' 将被拷入dest中) 注意dest的长度必须足够接收src的所有字符(包括 '\0')否则将可能引起严重的错误。有时不会触发运行时错误而运行出 看似正确 的结果,但即便后续的内存是可写的,但也许其中存着其他数据,写越界就有可能覆盖这些数据,引起其他bug,这是严重的安全隐患! strncat(s1, s2, n) (附加指定长度字符串) 字符串比较函数 strcmp(str1, str2) (逐个字符比较ASCⅡ码) str1 == str2,返回0

设计模式之原型模式(Prototype)详解及代码示例

☆樱花仙子☆ 提交于 2020-03-30 03:03:36
一、原型模式的定义与特点   原型(Prototype)模式的定义如下:用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。它属于 创建型 设计模式,用于创建重复的对象,同时又能保证性能(用这种方式创建对象非常高效)。   这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。 当直接创建对象的代价比较大时,则采用这种模式。 例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。 二、原型模式优点 性能优良:原型模式是在内存二进制流的拷贝,要比new一个对象性能好很多,特别是在一个循环体类产生大量对象的时候更加明显。 逃避构造函数的约束:这是优缺点共存的一点,直接在内存中拷贝,构造函数是不会执行的。 三、原型模式的使用场景 资源初始化场景:类初始化需要消耗非常多的资源的时候。 性能和安全要求的场景:通过new产生一个对象需要非常繁琐的数据准备和访问权限的时候。 一个对象多个修改者的场景:一个对象需要提供给其他对象访问,而各个调用者可能都需要修改其值时考虑使用。   实际项目中原型模式很少单独出现,一般和工厂模式一起出现,通过clone方法创建一个对象,然后由工厂方法提供给调用者。 四、原型模式的结构与实现   由于 Java 提供了对象的 clone(

js深拷贝与浅拷贝

左心房为你撑大大i 提交于 2020-03-28 05:54:09
实现一个页面或者一个功能时,常常遇到的场景需要我们备份一个数组或者对象,这时候出现了深拷贝与浅拷贝效果截然不同呀总结如下: 浅拷贝: 1 var 2 arr = [1, 2, 3, 4], 3 shallowArr = a; 4 arr[0] = "change"; 5 console.log(arr); 6 console.log(shallowArr); 很简单的例子,很明显结果是两个数组第一项同时发生改变,原因是因为arr与shallowArr两数组为同一数组,仅仅是地址名不同,而地址却是同一个。那么如何避免上面的情况发生呢那就是深拷贝了。 深拷贝: 1 var 2 arr = [1, 2, 3, 4], 3 deepArr = [].concat(arr); 4 console.log(arr === shallowArr); // false 上述代码这是针对数组内部为简单类型的深拷贝,当数组内部的成员为引用类型时上面的方式还能算深拷贝吗? 1 var 2 arr = [{ m: 1 }, { n: 2 }], 3 deepArr = [].concat(arr); 4 console.log(arr === deepArr); // false5 console.log(arr[0] === deepArr[0]); //true 很明显数组地址发生变化

python copy

蓝咒 提交于 2020-03-26 23:27:15
Python拷贝分为深拷贝和浅拷贝 浅拷贝对子对象不拷贝,深拷贝全部拷贝 l1 = [1, 2, [3, 4]] l2 = copy.copy(l1) l1.append(5) l1[2].append(5) # 子对象 改变 print(l1) print(l2) -------------- [1, 2, [3, 4, 5], 5] [1, 2, [3, 4, 5]] 深拷贝完是两个完全不相干的对象 l1 = [1, 2, [3, 4]] l2 = copy.deepcopy(l1) l1.append(5) l1[2].append(5) print(l1) print(l2) -------------- [1, 2, [3, 4, 5], 5] [1, 2, [3, 4]] 本文首发于 python黑洞网 ,博客园同步更新 来源: https://www.cnblogs.com/pythonzhilian/p/12577075.html

ES6 对象扩展

假如想象 提交于 2020-03-25 23:16:08
//ES5 对象 const getInfo=(id=1)=>{ //ajax... const name="cyy"; const age=18; return { name:name, age:age, say:function(){ console.log(this.name+this.age); } } } const cyy=getInfo(); //ES6 对象的简洁表示法 const getInfo2=(id=1)=>{ //ajax... const name="cyy"; const age=18; return { name,//会去找同名变量 age, say(){//方法可以省略冒号 console.log(this.name+this.age); } } } const cyy2=getInfo2(); 属性名表达式 const cyy={ name:"cyy", age:18, "#^":"不规范的属性名要用单引号或者双引号" } //ES6 const key="#^"; const cyy2={ name:"cyy2", age:18, [key]:"ES6使用[]" } [ ]里可以有表达式 //ES6 const cyy2={ name:"cyy2", age:18, ["aa"+"bb"+"cc"]:"ES6使用[]" } [ ]

Qt编译安装qwt错误moc/xxx Error:126

≡放荡痞女 提交于 2020-03-24 06:45:33
最近搞设计,需要在上位机上绘制曲线,在网上找了找,发现python的matplotlib和Qt的qwt都不错,本着难度最小原则,选择了Qt下面的qwt,安装过程中遇到了编译错误:moc/xxx Error:126等问题,搜了很多帖子,终于解决了,在此记录下解决过程,方便后来者。。。 首先到SourceForge上下载Qwt的源码: https://sourceforge.net/projects/qwt/files/qwt/ ,这里下载了qwt-6.1.3。windows上安装需要下载zip格式的压缩包。解压之后,为了后续安装方便,我们把解压得到的qwt-6.1.3文件夹重命名为qwt,并将其拷贝到Qt的安装目录,我是将Qt4.8.4和Qt-Creator安装在了一个Qt总目录下,就将qwt拷贝到Qt目录下,如下: 然后进入qwt目录下,对下面这两个文件进行编辑: 找到qwtbuild.pri文件中的如下位置: 将第30行改为: 修改这里的原因在上面注释中已经说得很明白了,在windows下面,无法合并debug和release版本的库文件。保存之后修改第二个文件qwtconfig.pri,找到如下位置: 将其改为: 修改这里的原因是为了方便组织程序,将Qt相关的所有程序都安装到Qt总目录下,这个目录要注意,以后也不能修改,要配合工程文件一起的,要不然会很麻烦。然后在开始

Js深度克隆解析

北城以北 提交于 2020-03-23 18:29:59
Js克隆(clone),就是数据拷贝,包括基础类型的数据和引用类型的数据,而深度克隆(deepClone)就是针对引用类型,如数组和对象。 两种拷贝的区别在于:浅拷贝时,拷贝出的对象指向原对象的地址,当其值发生改变时,原对象的值也发生改变;          深度拷贝,拷贝出的对象指向一个新的地址,当其值发生改变时,原对象的值不受影响。 下面列出深度拷贝的代码及其详细注释: var obj = {//待拷贝的对象 name:"abc", age:"123", card:['visa','master'], wife:{ name:"bcd", son:{ name:"aaa" } }, a:function(){} } function deepclone(origin , target){ var target = target || {}, tostr = Object.prototype.toString,//使用Object.prototype.toString.call方法进行对象和数组的区分,所以先将其进行存储以便使用 arr = '[object Array]'; for(var prop in origin){ if(origin.hasOwnProperty(prop)){//防止拷贝的对象从原对象的原型上取值 if(origin[prop] !== "null"