2012-07-29 80 views
2

我一直在寻找在docutil源代码(这是在python),当我看到这个(节录):Python字典“复制值”

def __init__(self, **attributes): 
    for att, value in attributes.items(): 
     att = att.lower() 
     if att in self.list_attributes: 
      # mutable list; make a copy for this node 
      self.attributes[att] = value[:] 
     else: 
      self.attributes[att] = value 

我谈论该生产线是这一个:

  self.attributes[att] = value[:] 

“[:]”究竟做了什么?上面的评论暗示了某种副本,但我的谷歌搜索没有那么成功,我不能确定它是一种语言功能还是某种技巧/快捷方式。

回答

8

这使得列表的副本(这不是一本字典)

的符号被称为“切片”。你也可以指定开始和结束复制的位置,如果你没有指定任何东西 - 就像你的代码提取 - 它会从第一个元素复制到最后一个元素。

例如,mylist[1:]将复制整个列表,省略第一个元素。

查看全文,请看here

+0

谢谢,它完美地回答了我的问题。只要网站允许我也会将其标记为答案(在8分钟内或多或少) – 2012-07-29 17:22:23

+0

请注意,它不是深层复制;它只是将引用复制到每个对象并将它们存储在一个新列表中。虽然这不应该是所有选择的复制方法,但如果您想在不影响迭代的情况下同时迭代和修改列表,这将非常有用。 – CosmicComputer 2012-07-29 22:27:24