python中元祖,列表,字符串付给一个变量时,这个变量仅仅是参考而已。也就是说,原始对象改了,你新赋值的那个也一定会改。因此,要使用值传递,实现起来就是使用切片操作。其实,我们发现这也对于元祖的元素不包含子元祖时才行得通,有子元素时,同样的问题一样会出现,当别人出现修改子元祖是,同样你会发现,你拷贝的那个子元祖也被改了,其实,解决的方法很多,称之为深度克隆把,貌似js里面也有这么一种说法。
'''
Created on 2012-5-12
@author: Administrator
'''
#引用
namelist=['zhang','li','wang']
mylist = namelist;
print('yuanshi list is',namelist)
del namelist[0]
print('namelist is',namelist)
print('mylist is',mylist);
print('#######################')
#拷贝
namelist=['zhang','li','wang']
mylist=namelist[:]
print('yuanshi list is',namelist)
del namelist[0]
print('namelist is',namelist)
print('mylist is',mylist);
print('#######################')
#拷贝里面也含有陷进
namelist=['zhang','li','wang']
namelist_tobeadd=['chen','wang','you']
namelist.append(namelist_tobeadd)
mylist=namelist[:]
print('yuanshi list is',namelist)
del namelist[0]
del namelist[2][2]
print('namelist is',namelist)
print('mylist is',mylist);
当然这上面的程序只是说明克隆不彻底的问题,要想深层次克隆想list这种类型的变量,需要用copy模块的,deepcopy函数