python变量赋值问题:
>>> a = [1,2,3,4]
>>> b = a
>>> c = []
>>> c = a
>>> d = a[:]
>>> a,b,c,d
([1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,4])
>>> b[0] = 'b'
>>> a,b,c,d
([b,2,3,4],[b,2,3,4],[b,2,3,4],[1,2,3,4])
>>> c[0] = 'c'
>>>a,b,c,d
([c,2,3,4],[c,2,3,4],[c,2,3,4],[1,2,3,4])
>>> d[0] = 'd'
>>>a,b,c,d
([c,2,3,4],[c,2,3,4],[c,2,3,4],[d,2,3,4])
>>> id(a),id(b),id(c),id(d)
(216939269000, 216939269000, 216939269000, 216939268552)
a、b、c的id值是同一个,所以修改其中任何一个的值都会改变其他的值;d的id不同,改变不会影响其他的值。
除了以上方法,还有copy()函数也可以对变量赋值并在修改新列表的时候不会改变原列表的值:
copy模块里的copy()函数:
>>> import copy
>>> a=[1,2,3]
>>> e=copy.copy(a)
>>> a,e
([1, 2, 3], [1, 2, 3])
>>> e[0]='e'
>>> a,e
([1, 2, 3], ['e', 2, 3])
>>> id(a),id(e)
(216939269000, 216939268552)
>>>
list自带的copy()方法:
>>> list = [1,2,3,4,5]
>>> copy_list = list.copy();
>>> list,copy_list
([1, 2, 3, 4, 5], [1, 2, 3, 4, 5])
>>> copy_list=copy_list+['a','b','c']
>>> list,copy_list
([1, 2, 3, 4, 5], [1, 2, 3, 4, 5, 'a', 'b', 'c'])
>>> id(list),id(copy_list)
(216939906760, 216939269000)