python中list
和list[:]
之间的区别是什么?在Python中列表和列表[:]之间有什么区别?
39
A
回答
61
读取时,list
是原始列表的引用,list[:]
浅副本列表。
分配时,list
(重新)绑定名称和list[:]
切片分配,替换列表中以前的内容。
此外,不要使用list
作为名称,因为它会遮挡内置。
18
后者是对列表副本的引用而不是对列表的引用。所以这非常有用。
>>> li = [1,2,3]
>>> li2 = li
>>> li3 = li[:]
>>> li2[0] = 0
>>> li
[0, 2, 3]
>>> li3
[1, 2, 3]
2
将第一个list
应用于变量将创建对原始列表的引用。 第二个list[i]
将创建一个浅拷贝。
例如:
foo = [1,2,3]
bar = foo
foo[0] = 4
酒吧和Foo现在将是:
[4,2,3]
但:
foo = [1,2,3]
bar = foo[:]
foo[0] = 4
结果将是:
bar == [1,2,3]
foo == [4,2,3]
:
是切片。
3
但是,如果列表元素本身是列表,即使list1 = list[:]
也有它的问题。试想一下:
>>> a = [[1,2,3],[4,5,6],[7,8,9]]
>>> b = a[:]
>>> b[0].remove(2)
>>> b
[[1, 3], [4, 5, 6], [7, 8, 9]]
>>> a
[[1, 3], [4, 5, 6], [7, 8, 9]]
这是因为被复制到B每个列表元素是一个列表本身,而这种复制列表涉及与正常list1 = list2
出现相同的问题。 我发现最短的出路是每一个列表元素这样明确地复制:
>>> a = [[1,2,3],[4,5,6],[7,8,9]]
>>> b=[[j for j in i] for i in a]
>>> b
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> b[0].remove(2)
>>> b
[[1, 3], [4, 5, 6], [7, 8, 9]]
>>> a
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
当然,在嵌套表嵌套每增加一个等级,复制代码深化了额外的内联for
循环。
1
li [:]创建原始列表的副本。但它并不涉及同一个列表对象。因此,您不必冒险更改由li [:]创建的副本来更改原始列表。
例如:
>>> list1 = [1,2,3]
>>> list2 = list1
>>> list3 = list1[:]
>>> list1[0] = 4
>>> list2
[4, 2, 3]
>>> list3
[1, 2, 3]
这里list2
通过改变list1
改变,但list3
不会改变。
相关问题
- 1. Python中列表之间的区别
- 2. 在Python中的列表,序列和切片之间的区别?
- 3. 列表中的:::和++有什么区别?
- 4. 列表(a)和[a]之间有什么区别?
- 5. 列表和多重集之间有什么区别?
- 6. 列表和序列之间的区别
- 7. 有db.Categories与列表之间有什么区别<Category>
- 8. 结构和列表ADT之间的用法区别是什么?
- 9. Android中的列表与阵列列表有什么区别
- 10. WPF中的类监听器和实例列表器之间有什么区别?
- 11. drupal表单和HTML表单之间有什么区别
- 12. 列表切片和直接分配列表之间的区别?
- 13. 列表<T>和列表<object>之间的区别?
- 14. 单列表和列表节点之间有什么不同?
- 15. 链接列表的首节点和起始节点之间有什么区别?
- 16. 管道和消息队列之间有什么区别?
- 17. 直接DCT和行列DCT之间有什么区别?
- 18. Magento中的sales_flat_order表中的'state'和'status'列有什么区别
- 19. dpm()和dsm()之间有什么区别?
- 20. @dynamic和@synthesize之间有什么区别?
- 21. vbNullString和“”之间有什么区别吗?
- 22. * zoom和zoom之间有什么区别?
- 23. String.Concat,string.format和+之间有什么区别?
- 24. StaticLayout和DynamicLayout之间有什么区别
- 25. WebServiceBinding.EmitConformanceClaims和WebServiceBinding.ConformanceClaims之间有什么区别?
- 26. :: after和after之间有什么区别?
- 27. %.02f和%.2f之间有什么区别?
- 28. {$ var}和$ var之间有什么区别?
- 29. ReleaseFloatArrayElements和DeleteLocalRef之间有什么区别
- 30. {0}和“”之间有什么区别?
如果你在外部列表中有不同的或未知的嵌套层次,这将会遇到严重的问题('''可能不可迭代)如果你有嵌套列表,你应该使用[copy](http:// docs.python。org/library/copy.html)模块,使用'b = copy.deepcopy(a)'而不是嵌套for循环。 – RoundTower 2011-07-12 11:53:58
^感谢您的提示! – 2011-07-12 15:18:57