li = [0] * 10和li = [set()] * 10的区别是什么?
这两个表达式创建了两个长度为10的列表,但它们之间存在一些重要的区别。
- li = [0] * 10:
- 这个表达式创建了一个包含10个元素的列表,每个元素都是整数0。
- 这意味着列表中的每个元素都是相同的对象,它们共享相同的内存地址。
- 修改其中一个元素会影响到其他所有元素,因为它们实际上是同一个对象的多个引用。
- 示例代码:
- 示例代码:
- li = [set()] * 10:
- 这个表达式创建了一个包含10个元素的列表,每个元素都是一个空的集合(set)。
- 这意味着列表中的每个元素都是不同的对象,它们具有不同的内存地址。
- 修改其中一个元素不会影响到其他元素,因为它们是独立的对象。
- 示例代码:
- 示例代码:
综上所述,li = [0] * 10创建了包含相同整数对象的列表,而li = [set()] * 10创建了包含不同集合对象的列表。在修改元素时,前者会影响到所有元素,而后者只会影响到特定元素。