在python的class里操作list的奇怪错误
巴扎黑
巴扎黑 2017-04-17 16:30:54
[Python讨论组]
巴扎黑
巴扎黑

全部回复(2)
怪我咯
self.__permResult.append(array[:])

引用,浅拷贝,和深拷贝。题主只是引用,如果list里没有list或者dict等,可以进行浅拷贝。否则,应该进行深拷贝。可以参考下面的例子。

import copy
l = [1,2,3,[4,5]]

l2 = l
l3 = l[:]
l4 = copy.copy(l)        #浅拷贝
l5 = copy.deepcopy(l)    #深拷贝

l[-1].append('change')
l.append(6)

print l2
print l3
print l4
print l5
# [1, 2, 3, [4, 5, 'change'], 6]
# [1, 2, 3, [4, 5, 'change']]
# [1, 2, 3, [4, 5, 'change']]
# [1, 2, 3, [4, 5]]

如果全排列,可以引用标准库中的 itertools

In [6]: list(itertools.permutations([1,2,3], 3))
Out[6]: [(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)]
天蓬老师

append(array)方法只是把array的引用放进去了,并没有拷贝array。
通过id(array)可以验证

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号