我知道元组是不可变的。但是我不明白为什么元组值在以下代码中会发生变化。我正在运行python 2.7
var someDiv = document.getElementsByTagName('div');
for(var i=0;i<someDiv.length;i++){
var text = someDiv[i].innerText.trim(); //kick out all the space with no utility
if(text.length<=0){
someDiv[i].style.display = 'none';
}
}
我期待my_tuple是'([3,4],[3,4])',而不是([3,4,20],[3,4,20])
答案 0 :(得分:4)
元组是不可变的。这并不意味着他们的内容必然是不可改变的。元组没有&#34;冻结&#34;你投入的任何内容的副本;它只是持有对象的引用。如果你的元组包含可变对象,你可以像往常一样改变它们。
答案 1 :(得分:4)
元组不可变但元组内的列表可变
您不能向元组添加新对象,但如果它们是可变的,您可以添加到元组内的对象。你没有改变你正在改变元组中存储的元素的元组。
如果你试图实际改变元组本身,你会收到一个错误:
In [12]: k = [3,4]
In [13]: my_tuple = (k,k)
In [14]: my_tuple[0] = [1,2,3]
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-14-c170b930bb12> in <module>()
----> 1 my_tuple[0] = [1,2,3]
TypeError: 'tuple' object does not support item assignment
当你追加到列表时,你没有改变元组所持有的对象,你只是在改变一个可变对象:
In [15]: id(my_tuple[0])
Out[15]: 140625164882288
In [16]: my_tuple[0].append(20)
In [17]: id(my_tuple[0])
Out[17]: 140625164882288