深copy和浅copy 问题

深copy和浅copy 问题

deepcopy没什么好说的
浅copy是直接copy对象,而不是任何对这个对象的引用,但是当列表套列表的时候,copy对象包含对fuliebiao
但是当列表中套列表的时候,copy对象包含对父列表的引用,这个不是很理解不过这个不是重点
a = [1, 2, 3, 4, ['a', 'b']]
b=copy.copy(a)
a.append('a')
a[4].append('a')
a[4]='a'
print a
print b
结果是
[1, 2, 3, 4, 'a', 'a']
[1, 2, 3, 4, ['a', 'b', 'a']]
问题1 为什么a[4].append('a')起作用了修改b的结果
而a[4]='a'则没有修改b呢?
这样的问题以后你都打印出id看看就知道了。


QUOTE:
原帖由 luffy.deng 于 2009-2-16 10:48 发表
这样的问题以后你都打印出id看看就知道了。

import copy
a = [1, 2, 3, 4, ['a', 'b']]
print id(a)
b=copy.copy(a)
print id(a)
print id(b)
a.append('a')
print id(a)
print id(b)
print id(a[4].append('a'))
print id(a)
print id(b)
a[4]='a'
print id(a)
print id(b)
print a
print b
请问能看出什么来?
不就看出了 a和b是两个不一样的地址吗?
与我的提问有关系吗????
a = [1, 2, 3, 4, ['a', 'b']]
b=copy.copy(a)
a.append('a')
a[4].append('a')
print id(a[4])
print id(b[4])
a[4]='a'
print id(a[4])
print id(b[4])
看出问题来没有?


QUOTE:
原帖由 luffy.deng 于 2009-2-16 11:31 发表
a = [1, 2, 3, 4, ['a', 'b']]
b=copy.copy(a)
a.append('a')
a[4].append('a')
print id(a[4])
print id(b[4])
a[4]='a'
print id(a[4])
print id(b[4])
看出问题来没有?

有点明白了 但是概念有点搞
a[4]='a'
是不是 a[4]引用了'a'
a[4].append('a')则是直接修改a[4]中的原始对象

浅copy 规定列表套列表仅仅在被套列表是原始对象前提下随之改变,因为我引用了一个新的对象所以copy不随之改变 ????
python 中赋值和引用是不是一个概念的
a=5 也仅仅是a引用了5 对不