Chinaunix首页 | 论坛 | 博客
  • 博客访问: 19958
  • 博文数量: 10
  • 博客积分: 25
  • 博客等级: 民兵
  • 技术积分: 95
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-12 09:51
文章分类

全部博文(10)

文章存档

2017年(9)

2016年(1)

我的朋友

分类: Python/Ruby

2017-10-11 16:06:52

看了一篇文章,写的特别好,总结如下:

对于 数字 和 字符串 而言,赋值、浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址。


点击(此处)折叠或打开

  1. import copy

  2. # ######### 数字、字符串 #########
  3. n1 = 123
  4. # n1 = "i am alex age 10"
  5. print(id(n1))
  6. # ## 赋值 ##
  7. n2 = n1
  8. print(id(n2))
  9. # ## 浅拷贝 ##
  10. n2 = copy.copy(n1)
  11. print(id(n2))

  12. # ## 深拷贝 ##
  13. n3 = copy.deepcopy(n1)
  14. print(id(n3))

结果如下:

点击(此处)折叠或打开

  1. 495346272
  2. 495346272
  3. 495346272
  4. 495346272

1.赋值操作
赋值,只是创建一个变量,该变量指向原来内存地址

点击(此处)折叠或打开

  1. n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]}

  2. n2 = n1

  3. print(id(n1))
  4. print(id(n2))
结果如下:

点击(此处)折叠或打开

  1. 10794632
  2. 10794632
他们的id是一样的

2.浅复制
浅拷贝,在内存中只额外创建第一层数据

点击(此处)折叠或打开

  1. import copy

  2. n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]}

  3. n3 = copy.copy(n1)

  4. print(id(n1))
  5. print(id(n3))
  6. print(id(n1['k3']))
  7. print(id(n3['k3']))
结果如下:

点击(此处)折叠或打开

  1. 7779976
  2. 12617224
  3. 19303752
  4. 19303752

第一层的id已经变化了,但是内层的'k3'还是指向同一个id;不过你修改n1['k3'],n3['k3']是不会变的,还是原来的。

3.深复制

在内存中将所有的数据重新创建一份(排除最后一层,即:python内部对字符串和数字的优化)

点击(此处)折叠或打开

  1. import copy

  2. n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]}

  3. n3 = copy.deepcopy(n1)

  4. print(id(n1))
  5. print(id(n3))
  6. print(id(n1['k3']))
  7. print(id(n3['k3']))
结果如下:

点击(此处)折叠或打开

  1. 10663560
  2. 18662792
  3. 19106760
  4. 19104968
n1['k3']和n3['k3']的id已经不一样了。




阅读(350) | 评论(0) | 转发(0) |
0

上一篇:iostat简单用法

下一篇:ps命令

给主人留下些什么吧!~~