# Modifying pixels of an image#

We can access the color information of certain columns of images in a similar way. We still have the 3X4 image saved as a 2D list `our_image`.

The RGB values of each pixel is as follows:

```(0,0,0)   (0,80,0)   (0,160,0)   (0,240,0)
(120,0,0) (120,80,0) (120,160,0) (120,240,0)
(240,0,0) (240,80,0) (240,160,0) (240,240,0)
```

Suppose we want to change this. Say you really like the color blue and you want the B component of every pixel to be the maximum value 255. Before writing a complete program, let’s handle a single pixel at the leftmost row and the top column, which is `our_image[0][0]`. We have learned before that the B component of this pixel can be accessed by `our_image[0][0][2]`.

```>>> our_image[0][0][2]
0
```

So why don’t we just run `our_image[0][0][2] = 255`? This is what would happen:

```>>> our_image[0][0][2] = 255
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
our_image[0][0][2] = 255
TypeError: 'tuple' object does not support item assignment
```

It is impossible to mutate an element of a tuple because tuples are immutable. Then, how can we modify a pixel without mutating a tuple? We can’t modify a tuple, but we CAN reassign the pixel with a new tuple, because this is not against the rule.

```our_image[0][0] = (0,0,225)
```

Implementing this way, we did not try modifying the tuple `(0,0,0)`, but we just reassigned a new tuple `(0,0,225)` to the pixel. Now, the RGB values and the image are changed as follows:

```(0,0,255) (0,80,0)   (0,160,0)   (0,240,0)
(120,0,0) (120,80,0) (120,160,0) (120,240,0)
(240,0,0) (240,80,0) (240,160,0) (240,240,0)
```