>>> a = object()
>>> b = object()
>>> A = [a, b]
>>> B = list(A)
>>> A
[<object object at 0x1002b7090>, <object object at 0x1002b70a0>]
>>> B
[<object object at 0x1002b7090>, <object object at 0x1002b70a0>]
>>> A is B
False
您可以看到list()实际上创建了一个基于a的列表的新实例。这就是A is B返回false的原因。但是,这两个列表的内容是相同的
Return a list whose items are the same and in the same order as
iterable‘s items. iterable may be either a sequence, a container that
supports iteration, or an iterator object. If iterable is already a
list, a copy is made and returned, similar to iterable[:]. For
instance, list('abc') returns ['a', 'b', 'c'] and list( (1, 2, 3) )
returns [1, 2, 3]. If no argument is given, returns a new empty list,
[].
希望它能更好地说明代码中发生了什么:
您可以看到
list()
实际上创建了一个基于a的列表的新实例。这就是A is B
返回false的原因。但是,这两个列表的内容是相同的实际上,不可变对象的任何间接赋值都可以被视为一个副本。例如:
从技术上讲,没有复制发生。添加到a时,实际上是在创建一个新对象,并将变量名“a”赋给它,而变量“b”继续引用原始字符串。你知道吗
就函数而言,在传递的变量中不会发生复制;但是,相同的规则适用于可变参数和不可变参数。如果要传递一个不可变对象,任何更改都只会影响本地“copy”。你知道吗
list()
在您的示例中没有做任何特殊的事情。你知道吗相关问题 更多 >
编程相关推荐