在python3中,对程序结果说明正确的是:
dicts = {'one': 1, 'two': 2, 'three': 3} tmp = dicts.copy() tmp['one'] = 'abc' print(dicts) print(tmp)
dicts = {'one': 1, 'two': 2, 'three': 3} tmp = dicts.copy() tmp['one'] = 'abc' print(dicts) print(tmp)
['one': 1, 'two': 2, 'three': 3],['one': 'abc', 'two': 2, 'three': 3]
{'one': 1, 'two': 2, 'three': 3},{'one': 'abc', 'two': 2, 'three': 3}
{'one': 'abc', 'two': 2, 'three': 3},{'one': 'abc', 'two': 2, 'three': 3}
{'one': 1, 'two': 2, 'three': 3},{'one': 1, 'two': 2, 'three': 3}
id(dicts) != id(tmp) id(dicts['one']) == id(tmp['one']) id(dicts['two']) == id(tmp['two']) id(dicts['three']) == id(tmp['three'])
dicts = {'one': 1, 'two': 2, 'three': 3} tmp = {'one': 'abc', 'two': 2, 'three': 3}3. 对于可变变量,添加和修改数据,不会改变变量对应的内存地址。所以如果题目中tmp['one']的值改为列表等可变变量时,再去修改tmp['one']中元素的值,你会发现tmp和dicts中的值都会改变,因为它们引用的是同一个内存地址的数据。即为
dicts = {'one': [7, 8], 'two': 2, 'three': 3} tmp = dicts.copy() tmp['one'][0] = 10 # 修改以后的结果 dicts = {'one': [10, 8], 'two': 2, 'three': 3} tmp = {'one': [10, 8], 'two': 2, three: 3}4. 对于可变变量,如果是重新赋值,而非添加和修改数据,也会改变变量对应的内存地址。所以如果题目中tmp['one']的值改为列表等可变变量时,再对tmp['one']重新赋值(而不是像第三点一样修改tmp['one']中元素的值时),你会发现tmp['one']和dicts['one']的值又不同了,因为重新赋值以后,此时tmp['one']的内存地址改变了,和原来的tmp['one']内存地址不同,而dicts['one']的内存地址还和原来一样。即为
dicts = {'one': [7, 8], 'two': 2, 'three': 3} tmp = dicts.copy() tmp['one'] = [9, 10] # 答案为 dicts = {'one': [7, 8], 'two': 2, 'three': 3} tmp = {'one': [9, 10], 'two': 2, 'three': 3}
dicts = {'one': 1, 'two': 2, 'three': 3} # 创建字典dicts,并将'one': 1, 'two': 2, 'three': 3赋值给字典dicts tmp = dicts.copy() # 创建变量tmp,复制字典dicts,将其赋值给变量tmp tmp['one'] = 'abc' # 将tmp变量中key值为one的value值替换成字符串abc print(dicts) # 输出字典dicts的值 print(tmp) # 输出变量tmp的值
copy方法,将当前的列表复制一份相同的列表,新列表与旧列表内容相同,但内存空间不同记住这一句就行了,记住它的核心,比什么都强,什么题就记什么知识点
{'one': ['abc', 4, 6], 'two': 2, 'three': 3} {'one': ['abc', 4, 6], 'two': 2, 'three': 8}
dicts = {'one': [1], 'two': 2, 'three': 3} tmp = dicts.copy() # 浅拷贝dicts tmp['one'].append(2) tmp['one'].append(3) tmp['two'] = 3 print(dicts) print(tmp)
在 Python 中,浅拷贝(Shallow Copy)是创建一个新的对象,然后将原对象中的元素的引用复制到新对象中。这意味着新对象和原对象中的元素实际上是同一个对象。因此,如果你修改了新对象中的一个元素,那么原对象中的对应元素也会被修改,反之亦然。