Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使列表独立于自身(?)_Python_List - Fatal编程技术网

Python 使列表独立于自身(?)

Python 使列表独立于自身(?),python,list,Python,List,我正在试验列表,并试图显示以下代码段: ---------- ---hello-- ---------- 但要做到这一点,我需要让3'列表彼此独立。有办法做到这一点吗 ( 电流输出当然是: ---hello-- ---hello-- ---hello-- ) 使用list构造函数制作listsall listBig = [list(listSmall) for i in range(3)] 另一种等效方法(IMO可读性较差)是使用空切片: listBig = [listSmall[:] f

我正在试验列表,并试图显示以下代码段:

----------
---hello--
----------
但要做到这一点,我需要让3'列表彼此独立。有办法做到这一点吗

(

电流输出当然是:

---hello--
---hello--
---hello--
)


使用
list
构造函数制作
listsall

listBig = [list(listSmall) for i in range(3)]
另一种等效方法(IMO可读性较差)是使用空切片:

listBig = [listSmall[:] for i in range(3)]

当您将
listBig
放入
listBig时,您想复制一份
listmall
。您可以使用
列表
功能执行此操作:

listBig = [list(listSmall), list(listSmall), list(listSmall)]

这是因为
list
是可变的

listBig = [listSmall, listSmall, listSmall]
使
listBig
指向同一可变列表三次,因此当您通过其中一个引用更改此可变列表时,您将通过所有三个引用看到此更改

您应该列出三个不同的列表:

listBig = [ ['-'] * 10 for _ in range(3)] 
根本不需要
listmall

整个代码:

listBig = [ ['-'] * 10 for _ in range(3)] 
word = 'hello'
wordPosX, wordPosY = 3, 1
listBig[wordPosY][3: (3+len(word))] = word
for v in listBig:
    print(''.join(v))

第一个和最后一个列表仍然可以共享。更节省内存的实现是

listBig = [listSmall, listSmall[:], listSmall]

请注意,第二个使用切片表示法来创建整个
listSmall
列表的副本。

或者,
listSmall[:]
@Volatility知道我还必须添加三个与问题无关的助手:
wordPosX+=1
用于listBig:print.中的v。加入(v)
listBig[wordPosy][3:3+len(word)]=word
您的第一行是“这是因为列表是可变的”。这与将listBig指向同一个列表三次有什么关系?@Utkarshssinha我添加了一些解释。有什么问题吗?写
[obj,obj,obj]
将使列表指向同一对象三次,无论
obj
是否可变。只是如果
obj
是不可变的,您可能不会注意到同一对象的三个副本与三个不同对象之间的差异。如果对象是可变的,您可以对其进行变异,然后您就会看到这一点您可以对所有三个列表项(如果它们都指向同一个对象)进行变异,而不是只对一个列表项进行变异(如果您创建了三个单独的对象)。@BrenBarn好的,但这就是我在回答中所说的。您永远不会注意到与ummutable对象的区别(这就是为什么
['-']*10
是安全的),除非您检查对象的标识,这很好。@digitalfarmer很抱歉我写得很混乱。它不是3:3。它实际上是
listBig[wordPosY][3:(3+len(word))]
listBig = [listSmall, listSmall[:], listSmall]