拷贝

Python的深浅拷贝

这一生的挚爱 提交于 2019-12-03 15:11:01
Python的深浅拷贝 深浅拷贝 1. 赋值,对于list, set, dict来说, 直接赋值. 其实是把内存地址交给变量并不是复制一份内容 1 list1 = ['python', 'PHP', 'java', 'C', ['name', 'YJ', 'age', '19']] 2 list2 = list1 3 print("list1的内容为:",list1,"list1的内存地址为:",id(list1)) 4 list2的内容为: ['python', 'PHP', 'java', 'C', ['name', 'YJ', 'age', '19']] list1的内存地址为: 2006224427976 5 print("list2的内容为:",list2,"list1的内存地址为:",id(list2)) 6 list2的内容为: ['python', 'PHP', 'java', 'C', ['name', 'YJ', 'age', '19']] lis2的内存地址为: 2006224427976 所以lst1的内存指向和lst2是⼀样的list1改变了list2也发生了改变 1 list1 = ['python', 'PHP', 'java', 'C', ['name', 'YJ', 'age', '19']] 2 list2 = list1 3 list1

js 数组 深拷贝 复制 (汇总)

断了今生、忘了曾经 提交于 2019-12-03 15:02:23
https://www.cnblogs.com/zhoupengyi/p/6048955.html https://www.cnblogs.com/racyily/p/3532176.html https://www.cnblogs.com/lvonve/p/11334628.html https://www.cnblogs.com/jiangzilong/p/6513552.html https://www.cnblogs.com/Loofah/archive/2012/03/23/2413665.html https://blog.csdn.net/xm1037782843/article/details/99758891 https://www.cnblogs.com/xiezhonglong/p/5779004.html https://www.cnblogs.com/wangyulue/articles/7684515.html 来源: https://www.cnblogs.com/hao-1234-1234/p/11801333.html

docker常用命令

情到浓时终转凉″ 提交于 2019-12-03 14:27:59
镜像常用命令 查看镜像 docker images 在Docker宿主机的/var/lib/docker目录下的镜像 REPOSITORY:镜像名称 TAG     :镜像标签 IMAGE ID :镜像ID CREATED :镜像的创建日期(不是获取该镜像的日期) SIZE :镜像大小 搜索镜像 docker search 镜像名称 NAME    :仓库名称 DESCRIPTION:镜像描述 STARS    :用户评价,反应一个镜像的受欢迎程度 OFFICIAL   :是否官方 AUTOMATED :自动构建,表示该镜像由Docker Hub自动构建流程创建的 拉取镜像 拉取镜像就是从中央仓库中下载镜像到本地 docker pull 镜像名称例如:docker pull centos:7 删除镜像 按镜像ID删除镜像 docker rmi 镜像ID 删除所有镜像 docker rmi `docker images -q` 容器相关命令 查看容器 查看正在运行的容器 docker ps 查看所有容器 docker ps –a 查看最后一次运行的容器 docker ps –l 查看停止的容器 docker ps -f status=exited 创建与启动容器 创建容器常用的参数说明: 创建容器命令:docker run -i:表示运行容器 -t:表示容器启动后会进入其命令行

原型模式

∥☆過路亽.° 提交于 2019-12-03 13:51:40
1. 原型模式简介 原型模式属于创建型模式,其主要作用就是用一个对象创建出新的对象,既简化了对象的创建过程,又对外隐藏创建细节。通常我们会使用new关键字来创建对象,但是当对象构造方法接受大量参数,或者需要设置大量字段时,代码就会显得冗长。这时大家可能会想到使用工厂模式将对象的创建与使用分离,但是工厂模式会造成类膨胀,当产品比较多时,会导致项目中充斥着大量的产品类和工厂类。原型模式给我们指出另一条路,即克隆,复制一个一模一样的自己,从而达到创建新对象的目的。 在java中,一切类都是Object类的子类型,Object类为我们提供了clone()方法,因此,当我们需要克隆一个实例时,直接调用clone()方法就行了。但是clone()方法有几个限制: ①调用clone()方法的对象需要实现Cloneable接口。Cloneable只是一个符号接口,本身不包含任何方法声明,它的作用仅仅是说明实现这个接口的类能够使用clone()方法。 ②clone()只能实现浅拷贝,不能实现深拷贝。浅拷贝是只对基本数据类型进行复制,而对于包含引用的对象进行拷贝时,则只是将引用复制一份,复制出来的引用于原对象的引用指向的是同一个内存地址。实现深拷贝有几种方式,一是实现Serializable接口;二是覆盖clone()方法,但是当类包含的引用类型较多时,会写很多额外的代码;参考 Java深拷贝与序列化

java.util.Collections与java.util.Arrays使用时的注意

早过忘川 提交于 2019-12-03 12:48:06
(一)Arrays Arrays.asList( )将数组转换成List集合,但是要注意: 原因在于: 这个ArrayList不是java.util包下的,而是java.util.Arrays.ArrayList,显然它是Arrays类自己定义的一个内部类! 这个内部类没有实现add()、remove()方法,而是直接使用它的父类AbstractList的相应方法。而AbstractList中的add() 和remove()是直接抛出java.lang.UnsupportedOperationException异常的! 解决方案: 个人理解: 解决方案是利用浅拷贝,拷贝的只是引用。拷贝后两个list的引用不同,但是引用所指向的对象是一样的。 即两个list的每个元素指向的还是同一内存对象。 (二)Collections 拷贝一个ArrayList对象到另一个ArrayList对象中,正好可以使用该方法Collections.copy( ),不过值得注意的是: 原因在于: 虽然目标集合的capacity(容纳能力大小)已经指定(最好指定),但是不代表它就具有数据。所以初始化时size 的大小仍然默认为0,只有在进行add和remove等相关操作时,size的大小才变化。在进行copy()时候,首先做的是将desc 的size和src的size大小进行比较,只有当desc的 size

ES6-对象的扩展-Object.assign()

柔情痞子 提交于 2019-12-03 12:40:47
基本用法 Object.assign 方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)。 const target = { a: 1 }; const source1 = { b: 2 }; const source2 = { c: 3 }; Object.assign(target, source1, source2); target // {a:1, b:2, c:3} Object.assign 方法的第一个参数的目标对象,后面的参数都是源对象。 注意,如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性。 const target = { a: 1, b: 1 }; const source1 = { b: 2, c: 2 }; const source2 = { c: 3 }; Object.assign(target, source1, source2); target // {a:1, b:2, c:3} 如果只有一个参数,Object.assign 会直接返回参数。 const obj = {a: 1}; Object.assign(obj) === obj // true 如果该参数不是对象,则会先转成对象,然后返回。 typeof Object.assign(2) // "object"

JavaScriptES6对象的Object.is和Object.assign方法详解

感情迁移 提交于 2019-12-03 12:40:17
目录 Object.is() Object.assign() Object.is() ES5比较两个值是否相等,只有两个运算符:相等运算符(===)和严格运算符(===)。他们都有缺点,前者会自动转换数据类型,后者NaN不等于自身,以及 +0 等于-0,JavaScript缺乏一种运算,在所有环境中,只要两个值一样的,它们就应该相等。 ES6提出同值相等算法,用来解决这个问题。Object.is()就是部署这个算法的新方法。它用来比较两个值是否严格相等,与严格比较运算符(===)行为一致。 console.log(Object.is("a","a")); //true console.log(Object.is({},{})); //false 但是,不同的是:+0 不等于-0,NaN等于自身。 console.log(+0 === -0); //true console.log(NaN === NaN); //false console.log(Object.is(+0,-0)); //false console.log(Object.is(NaN,NaN)); //true Object.is方法实现这个方法很简单。 Object.defineProperty(Object,"is"{ value : function(x,y){ if(x === y){ return x !

扩展运算符,Object.assign

北城余情 提交于 2019-12-03 12:38:54
2019独角兽企业重金招聘Python工程师标准>>> assign或者...扩展符 都是浅拷贝 对象中的扩展运算符(...)用于取出参数对象中的所有可遍历属性,拷贝到当前对象之中 Object.assign 方法用于对象的合并,将源对象 (source) 的所有可枚举属性,复制到目标对象 (target) 如果在拷贝 属性值是对象时,拷贝的是对象的引用地址 可以简单深拷贝: 借助 JSON.parse 。因为字符串转成对象之后就是一个新的对象 var a={title:'a',name:{a:'1',b:'2'}}; var b = JSON.parse(JSON.stringify(a)) b.name.a='3'; console.log(a,b) ========================= let bar = {a:1,b:2}; let foo = {c:3, ...bar} ==> 等价于 let foo = Object.assign({},bar); let bar = [1,2,3] let foo = [4,...bar] 任何 Iterator 接口的对象(参阅 Iterator 一章),都可以用扩展运算符转为真正的数组 foo (a,b,c){ const args = [...arguments]; =>等价于 Array.prototype

从Object.assign()到ES6对象到扩展

为君一笑 提交于 2019-12-03 12:38:35
本文内容参考: ECMAScript 6 入门 背景 在上一个项目开发中,看到项目内存在很多 Object.assign() 写法的代码,由于之前没有接触过,感觉比较疑惑。通过网上查询发现,这是ES6对对象进行的扩展之一,于是系统的了解了一下ES6中对对象进行的扩展。 学习 属性的简洁表示法 ES6 允许直接写入变量(变量需要存在)和函数,作为对象的属性和方法。 let birth = '2000/01/01' ; const Person = { name: '张三' , //等同于birth: birth birth, // 等同于hello: function ()... hello() { console.log( '我的名字是' , this .name); } }; 属性名表达式 ES6 允许字面量定义对象时,使用中括号+变量名作为对象的属性名,即把表达式放在方括号内。 let lastWord = 'last word' ; const a = { 'first word' : 'hello' , [lastWord]: 'world' }; a[ 'first word' ] // "hello" a[lastWord] // "world" a[ 'last word' ] // "world" Object.is() ES5 比较两个值是否相等,只有两个运算符

大数据 Hadoop Windows开发环境搭建

折月煮酒 提交于 2019-12-03 11:44:13
1、解压Hadoop安装包、源码包 2、新建一个文件夹用于存放jar包 3、将hadoop-2.6.5\share\hadoop下的所有jar包拷贝到新建的文件夹中 4、配置环境变量,将Hadoop安装包解压路径配置到环境变量中 加入到PATH中 再配置一条HADOOP_USER_NAME 5、替换安装包目录下bin目录的文件 替换文件https://pan.baidu.com/s/1EV7FfbZ5Hk-5lrp-9KpYpg 6、将bin目录下的hadoop.dll文件拷贝到C:\Windows\System32 7、安装eclipse mars.2后,将hadoop-eclipse-plugin-2.6.0插件拷贝到eclipse安装目录的plugis目录下 8、打开eclipse,window>preferences>hadoop map/reduce 将路径设置为hadoop安装路径 9、在map/reduce locations窗口下新建一个连接 10、 window>preferences>java>buid path>user libraries,new一个library。 11、点击add external jars,将之前拷贝出来的jar包全部导入 12、在项目中右键>build path>configure build path>libraries>add