我正在学习Python数据结构。如果元组被认为是不可变的,谁能解释我如何通过引用复制来更改元组的对象值?
>>> tuple1=[20,30,40]
>>> tuple2=tuple1
>>> print(tuple2)
[20, 30, 40]
>>> tuple2[1]=10
>>> print(tuple2)
[20, 10, 40]
>>> print(tuple1)
[20, 10, 40]
答案 0 :(得分:2)
您有列表,没有元组。如果您真的在元组上尝试过
x = (1, 2, 3) # or x = tuple([1, 2, 3])
x[1] = 5
你得到
TypeError: 'tuple' object does not support item assignment
证明了它们的不变性。
更重要的是,可变/不可变和按值/按引用是两个不同的事物。 x
变量是对内存中实际对象的实际引用(不是其值的副本),但是仍然不能更改实际对象。值/引用将对可变对象有所不同,因为更改对象时,您需要知道是要更改副本还是原始对象。
答案 1 :(得分:0)
在无法更改所包含的对象的意义上,字符串是不可变的(即,元组本身保持不变)。例如
app.on('ready', function() {
//call python?
var subpy = require('child_process').spawn('python', ['./hello.py']);
var rq = require('request-promise');
var mainAddr = 'http://localhost:5000';
var openWindow = function(){
// Create the browser window.
mainWindow = new BrowserWindow({width: 800, height: 600});
// and load the index.html of the app.
// mainWindow.loadURL('file://' + __dirname + '/index.html');
mainWindow.loadURL('http://localhost:5000');
// Open the devtools.
mainWindow.webContents.openDevTools();
// Emitted when the window is closed.
mainWindow.on('closed', function() {
// Dereference the window object, usually you would store windows
// in an array if your app supports multi windows, this is the time
// when you should delete the corresponding element.
mainWindow = null;
// kill python
subpy.kill('SIGINT');
});
};
是不可能的。但是,您可以做的是元组引用的 modify 对象。例如:
>>> t = (1, 2)
>>> t[0] = 3
输出
t = (1, [2])
print(t)
t[1][0] = 3
print(t)
元组(1, [2])
(1, [3])
仍包含与以前相同的对象,但是其中一个对象(t
)已更改(使元组保持不变)。
答案 2 :(得分:0)
您可以通过将 tuple 转换为 list ,修改 list ,然后再转换回元组,如果您的最终输出是 list ,则该路线仅适用于 tuple 的 list 版本>
tup = (20,30,40)
tup = [*tup]
tup[0] = 10
tup = tuple(tup)
(20, 30, 40) [20, 30, 40] [10, 30, 40] (10, 30, 40)