深拷贝

Java中对象的浅拷贝与深拷贝

て烟熏妆下的殇ゞ 提交于 2019-12-13 16:55:27
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Java中的拷贝方式分为深拷贝和浅拷贝。简单来说,深拷贝就是把一个对象中的所有值,如果被拷贝对象中有对其他对象的引用,那么这个引用指向的对象本身会被重新创建。浅拷贝和深拷贝类似,但是如果被拷贝对象中有对其他对象的引用,只是这个引用会被拷贝,而不是这个被引用的对象。 http://bbs.itheima.com/thread-23776-1-1.html?fstgj 以前的学习网站, - 全套 java 视频教程,需要的自己看下,可以去这个网站下载,下载视频免费,不需要注册和做什么任务 说起来有点绕口,那么我们就看看下面的图解吧: 深拷贝: 浅拷贝: 来看下面这段代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 public class Car { private String brand ; private int price ; public String getBrand () { return brand ; } public void setBrand ( String brand ) { this . brand = brand ; } public int getPrice () { return price ; } public void

Objective-C浅拷贝和深拷贝

被刻印的时光 ゝ 提交于 2019-12-07 01:40:40
浅拷贝 浅拷贝就是对内存地址的复制,让目标对象指针和源对象指向同一片内存空间。如: char * str = ( char *) malloc ( 100 ); char * str2 = str; 浅拷贝只是对对象的简单拷贝,让几个对象共用一片内存,当内存销毁的时候,指向这片内存的几个指针需要重新定义才可以使用,要不然会成为野指针。 iOS 里面的浅拷贝: 在 iOS 里面, 使用retain 关键字进行引用计数,就是一种更加保险的浅拷贝。他既让几个指针共用同一片内存空间,又可以在release 由于计数的存在,不会轻易的销毁内存,达到更加简单使用的目的。 深拷贝: 深拷贝是指拷贝对象的具体内容,而内存地址是自主分配的,拷贝结束之后,两个对象虽然存的值是相同的,但是内存地址不一样,两个对象也互不影响,互不干涉。 copy 与 retain 的区别: copy 是创建一个新对象,retain 是创建一个指针,引用对象计数加一。 copy属性标识两个对象内容相同,新的对象retain count为1, 与旧有对象引用计数无关,旧有对象没有变化。copy减少对象对上下文的依赖。 深拷贝: iOS提供了copy和mutableCopy方法,顾名思义,copy就是复制了一个imutable的对象,而mutableCopy就是复制了一个mutable的对象。以下将举几个例子来说明。

Python动态类型的学习---引用的理解

倖福魔咒の 提交于 2019-12-03 04:55:21
一,Python浅拷贝和深拷贝 浅拷贝 是指拷贝的只是原对象元素的引用,换句话说,浅拷贝产生的对象本身是新的,但是它的内容不是新的,只是对原对象的一个引用。这里有个例子 >>> aList=[[1, 2], 3, 4] >>> bList = aList[:] #利用切片完成一次浅拷贝 >>> id(aList) 3084416588L >>> id(bList) 3084418156L >>> aList[0][0] = 5 >>> aList [[5, 2], 3, 4] >>> bList [[5, 2], 3, 4] 可以看到,浅拷贝生产了一个新的对象bList,但是aList的内容确实对aList的引用,所以但改变aList中值的时候,bList的值也跟着变化了。 但是有点需要特别提醒的,如果对象本身是不可变的,那么浅拷贝时也会产生两个值,见这个例子: >>> aList = [1, 2] >>> bList = aList[:] >>> bList [1, 2] >>> aList [1, 2] >>> aList[1]=111 >>> aList [1, 111] >>> bList [1, 2] 为什么bList的第二个元素没有变成111呢?因为数字在python中是不可变类型!! 这个顺便回顾下Python标准类型的分类: 可变类型: 列表,字典 不可变类型:数字