深copy

更好的对一个对象进行复制

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using ChartUtil;
 6 using System.Windows.Forms;
 7 using System.IO;
 8 using System.Runtime.Serialization;
 9 using System.Runtime.Serialization.Formatters.Binary;
10 //using System.Runtime.Serialization.Formatters.Soap;
11
12 namespace NetAnalysis.Common
13 {
14     public static class DrawChartExtensionMethodClass
15     {
16
17
18         #region 单击事件
19         public static void ChartMouseRigthClick(this DrawChart dict)
20         {
21
22             dict.ChartMouseClick += delegate
23             {
24
25                 MessageBox.Show("kkk");
26             };
27         }
28
29
30
31
32         #endregion
33     }
34
35     [Serializable]
36     public class TimeRegion : ICloneable
37     {
38
39         public List<List<DateTime>> timeregion = new List<List<DateTime>>();
40
41
42         #region ICloneable 成员
43
44         public object Clone()
45         {
46         //  return this.MemberwiseClone();
47             return new TimeRegion() as TimeRegion ;
48         }
49
50         #endregion
51
52         public TimeRegion DeepClone()
53         {
54             using (Stream objectStream = new MemoryStream())
55             {
56                 IFormatter formatter = new BinaryFormatter();
57                 //IFormatter formatter = new SoapFormatter();
58                 formatter.Serialize(objectStream, this);
59                 objectStream.Seek(0, SeekOrigin.Begin);
60                 return formatter.Deserialize(objectStream) as TimeRegion;
61             }
62
63             ////这个版本有问题
64             //TimeRegion rtd = new TimeRegion();
65             //rtd.timeregion = this.timeregion;
66
67             //return rtd;
68         }
69
70         public TimeRegion ShallowClone()
71         {
72             return Clone() as TimeRegion;
73         }
74
75
76
77     }
78 }
时间: 2024-10-12 04:18:28

深copy的相关文章

python学习笔记-(六)深copy&amp;浅copy

在python中,对象赋值实际上是对象的引用.当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用. 1. 赋值 赋值其实只是传递对象引用,引用对象id是一样的.原始列表改变,被赋值的b也会做相同的改变. 1 2 3 4 5 6 7 8 9 10 11 12 13 >>> alist = [1,2,3,["a","b"]] >>> b = alist >>> p

【C/C++学院】(6)构造函数/析构函数/拷贝构造函数/深copy浅copy

1.构造函数 类的初始化即为构造函数.也为:隐式的初始化. 构造函数在对象初始化的时候,自动被调用.隐式的调用. 构造函数分为三种:有参构造函数.无参构造函数.拷贝构造函数. 有参构造函数调用有三种:括号法.等号法.手工法. #include <iostream> using namespace std; class Test { private: int m_a; public: Test()//无参构造函数 { } Test(const Test &obj)//拷贝构造函数 { }

python基础之赋值/深copy/浅copy

首先,不管是赋值还是深浅copy,都是针对那些可能会产生变化的值进行区分的,也就是对于数字,字符串来说,区分赋值,深浅copy是毫无意义的. 那么,让我们来对那些可变的像list set dict tuple……来进行探讨. 赋值: 有两种修改n的方法: 1  直接对n赋值 >>> n=[1,2] >>> g=n >>> id(n) 140529062430792 >>> id(g) 140529062430792 >>&

理解一下python中的浅copy和深copy

最近在学习过程中,了解了一下,浅copy和深copy,做个记录. 所谓浅拷贝就是对引用的拷贝,所谓深拷贝就是对对象的资源的拷贝. 首先,对赋值操作我们要有以下认识: 赋值是将一个对象的地址赋值给一个变量,让变量指向该地址( 旧瓶装旧酒 ). 修改不可变对象(str.tuple)需要开辟新的空间 修改可变对象(list等)不需要开辟新的空间 浅拷贝仅仅复制了容器中元素的地址 >>> user = ['tom', ['age', 20]] >>> user_new = us

列表的使用2,深COPY和浅COPY,循环列表,步长切片

name2=names.copy() 下面我看几种奇怪的现象: 首先把源列表copy以后,把源列表第2个数值修改.那么没毛病. 如果源列表里,还包含了一个子列表:这也没毛病 如果我们这个时候修改子列表的数值.我们来看一个神奇的现象: copy是一种浅COPY,它只会COPY第一层的数据,而不会深入COPY.只会COPY子列表的内存指针,内存地址. 如果你不用COPY的方法,那问题会更严重: 结果是这样的,连浅COPY都不如:相当于只把列表的内存地址复制了一下: 简单来说就是这种情况. 但是如果是

浅copy 与 深copy

1 import copy 2 names = ["zhangyang", 'guyun', 'xiangpeng', ['jack','tom'], 'xuliangchen'] 3 names2 = names.copy() #浅copy,复制后改变原列表,copy后的列表不发生改变 4 5 6 names[2] = "祥鹏" 7 names.append("zhangshan") 8 9 print(names) 10 print(name

Day2-Python基础2---浅copy、深copy的差别

浅copy 首先我们来看下面一段代码: 1 1 >>> names = ["maqing"," peilin"," xiaoming"," lilei"," hanmeimei",["maqing","wangchuan","lilong"]] 2 2 >>> names2 = names.copy() 3 3

python中的深copy和浅copy

bytes Python bytes/str bytes 在Python3中作为一种单独的数据类型,不能拼接,不能拼接,不能拼接 >>> '€20'.encode('utf-8') b'\xe2\x82\xac20' >>> b'\xe2\x82\xac20'.decode('utf-8') '€20' 解码 >>> b'\xa420'.decode('windows-1255') '?20' 深copy和浅copy 深copy新建一个对象重新分配内存

关于iOS的深copy和浅copy 以及copy 和 strong 的区别

之前都是靠记忆来维持copy和strong  也有问过我 .  我自己说起来才感觉都说不很清楚 通过简单都代码来验证一下 . 有时候花点时间验证一下才能让思路更加清晰 NSMutableString * mustr = [NSMutableString stringWithString:@"good"]; self.str = mustr; self.fuzhiString = mustr; NSLog(@"self.str is (%@) ==== str,self.fuz

(五)聊一聊深Copy与浅Copy

一.关于浅copy与深copy 首先说明一下: 在python中,赋值其实就是对象的引用,变量就是对象的一个标签,如果把内存对象比喻成一个个房间,那么变量就是门牌号. 深copy与浅copy只是针对可变类型而言,对于不可变类型,无论深浅,值相等,内存地址一样,一旦值发生变化,相当于再创建一个对象. 浅copy有3种方法: a=[1,2,3,["a","b"],22] a1=a[:]  切片操作 a2=list(a)  工厂函数 a3=copy.copy(a)  或