为何Python中visitIslandBFS能修改countIslandsBFS的matrix变量
为什么visitIslandBFS()能修改countIslandsBFS()中的matrix变量?
这是Python参数传递机制导致的,核心点在于可变对象的引用传递:
- Python里函数参数传递的是「对象的引用」,不是值的拷贝,也不是内存地址的直接传递。
- 像列表、字典这类可变对象,当你把它们传给函数时,函数拿到的是指向原对象的引用。如果在函数内部修改对象的内容(比如修改列表的元素),本质是在操作原内存地址里的对象,所以外部的原变量也会看到变化。
- 而像int、字符串这类不可变对象,函数内部修改参数时,会创建一个新的对象,原变量不会受到影响。
回到你的代码:
countIslandsBFS里的matrix是嵌套列表,属于可变对象。调用visitIslandBFS(matrix, i, j)时,传递的是这个列表的引用。- 在
visitIslandBFS中执行matrix[row][col] = 0,是直接修改了原列表对象中的元素值,并没有创建新的列表。所以countIslandsBFS里的matrix自然会同步看到这些修改。
这就是为什么不需要返回值,函数也能修改外部的matrix变量——因为操作的是同一个可变对象的内容。
内容的提问来源于stack exchange,提问作者yitivow219
相关产品推荐
相关产品推荐

