python语句含义及结果原因求助
做题时碰到一个疑问,我的列表是在函数外面,但是题目要求在原来列表上翻转k位,不要创建新的列表,然后我就看到这个用法nums[:] = nums + nums[:len(nums) - k]
这个语句为什么可以直接改变在函数外面的列表的值?这不是浅拷贝吗,我打印了id(nums[:] )和id(nums)不一样啊
class Solution:
def rotate(self, nums,k) -> None:
nums[:] = nums + nums[:len(nums) - k]
print(nums)
if __name__ == '__main__':
c = Solution()
nums =
c.rotate(nums,3)
print(nums) nums[:]出现在等号左边时它是通过列表的__setitem__方法实现的,此方法内是对列表实例进行修改。出在在等号右边或者取值的时候是通过__getitem__方法实现的,他返回的是列表实例的浅拷贝。 它既可以用来拷贝也可以用来赋值,就跟 一个道理
test =
a = test # 可以用 test 来取出 test 列表的元素
test = 6 # 也可以通过 test 来改变 test 列表的元素 hrpzcf 发表于 2022-4-14 00:21
nums[:]出现在等号左边时它是通过列表的__setitem__方法实现的,此方法内是对列表实例进行修改。出在在等号 ...
这个是哪个知识点啊?没学到{:5_106:} 良木 发表于 2022-4-14 09:42
这个是哪个知识点啊?没学到
小甲鱼教程好像没讲这个(记不清了)
我上面的回答有点问题,应该概括为nums[]的赋值和取值是通过不同的魔法方法实现的,所以出现了你的疑问中的不同。
你可以百度了解一下它们用法,x[]类型的赋值、取值和__setitem__、__getitem__有关,比如x、x、x["a"]等。
页:
[1]