建立引用的道路上充满了陷阱

>>> def dupu(t):
    return t

>>> t=[1,2,3]
>>> s=dupu(t)
>>> s
[1, 2, 3]
>>> t.append(4)
>>> s
[1, 2, 3, 4]

本来只想改变t列表,结果s列表也发生相同变化了.根本原因在于变量s和t都是指向同一个list对象.

如何避免这种情况,让s和t相互独立?那就要让dupu返回一个新的list对象.

>>> def dupu(t):
    return [i for i in t]

>>> t=[1,2,3]
>>> s=dupu(t)
>>> s
[1, 2, 3]
>>> t.append(4)
>>> s
[1, 2, 3]
>>> 

或者使用copy.deepcopy函数:

>>> import copy
>>> def dupu(t):
    return copy.deepcopy(t)

>>> t=[1,2,3]
>>> s=dupu(t)
>>> s
[1, 2, 3]
>>> t.append(4)
>>> s
[1, 2, 3]

 

 

posted @ 2013-10-23 12:14  LisPythoniC  阅读(138)  评论(0编辑  收藏  举报