|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
书中定义:浅复制为创建一个新对象,包含的是对原始对象中包含的项的引用。
- import copy
- 2 a = [1, 2, 3, 4, [5, 6]]
- 3 b = copy.copy(a)
- 4 b.append(7)
- 5 print(a)
- 6 print(b)
- 7 a[4][1] = -2
- 8 print(a)
- 9 print(b)
- 10 a[2] = -3
- 11 print(a)
- 12 print(b)
复制代码 使用的是python3.5。第7步和第10步都是赋值,为何第7步改变a值,b值也改变;而第10步a值变化了, 但b值没变。
本帖最后由 不二如是 于 2017-4-14 07:51 编辑
可以使用 print id(a)来查看a指向的内存地址,当你完成对b赋值后再查看b指向的内存地址,会发现a和b指向的内存地址是不同的,这说明前拷贝会建立新的对象,所以当你对b进行添加元素,b会变而a不会
但是,如果你分别查看a和b中的每一个元素指向的内存地址,会发现id(a[0])=id(b[0]),id(a[1])=id(b[1])...,即b中元素的内存地址与a中元素的内存地址对应相同;同时元素有分可变元素与不可变元素,a=[1,2,3,4,[5,6]]时,a[4]为可变元素,其余为不可变元素,当可变元素发生变化时,它的值虽然变了,但它仍指向原来的内存地址,而不可变元素发生变化时,它会指向新的内存地址,所以当你改变a[4]时,a[4]与b[4]指向内存地址相同,b[4]也变了;而当你改变a[2]时,a[2]指向新的内存地址,b[2]仍指向原来的内存地址,所以b[2]不变
|
|