is Eigen make a deep copy of matrix?

```
void testSparseMatrix()
{
using namespace Eigen;
using namespace std;
typedef Triplet Trip;
std::vector trp, tmp;
// I subtracted 1 from the indices so that the output matches your question trp.push_back(Trip(1 - 1, 1 - 1, 3));
trp.push_back(Trip(1 - 1, 3 - 1, 4));
trp.push_back(Trip(2 - 1, 3 - 1, 1));
trp.push_back(Trip(3 - 1, 2 - 1, 2));
trp.push_back(Trip(3 - 1, 4 - 1, 5));
trp.push_back(Trip(4 - 1, 1 - 1, 4));
int rows, cols;
rows = cols = 4;
SparseMatrix A(rows, cols);
A.setFromTriplets(trp.begin(), trp.end());
cout &lt;&lt; "Matrix from triplets:" &lt;&lt; endl;
cout &lt;&lt; A &lt;&lt; endl; cout &lt;&lt; endl &lt;&lt; "Triplets:" &lt;&lt; endl;
cout &lt;&lt; "Row\tCol\tVal" &lt;&lt; endl;
for (int k = 0; k &lt; A.outerSize(); ++k)
{
for (SparseMatrix::InnerIterator it(A, k); it; ++it)
{
cout &lt;&lt; 1 + it.row() &lt;&lt; "\t"; // row index
cout &lt;&lt; 1 + it.col() &lt;&lt; "\t"; // col index (here it is equal to k)
cout &lt;&lt; it.value() &lt;&lt; endl;
}
}
//////////////////////////
SparseMatrix B; B = A;
std::cout &lt;&lt; "A\n" &lt;&lt; Eigen::MatrixXi(A) &lt;&lt; std::endl;
std::cout &lt;&lt; "B\n" &lt;&lt; Eigen::MatrixXi(B) &lt;&lt; std::endl;
B.coeffRef(0, 0) = 98;
std::cout &lt;&lt; "A\n" &lt;&lt; Eigen::MatrixXi(A) &lt;&lt; std::endl;
std::cout &lt;&lt; "B\n" &lt;&lt; Eigen::MatrixXi(B) &lt;&lt; std::endl;
std::cin.get();
}
```

output:

Matrix from triplets:
3 0 4 0
0 0 1 0
0 2 0 5
4 0 0 0

Triplets:
Row Col Val
1 1 3
4 1 4
3 2 2
1 3 4
2 3 1
3 4 5
A
3 0 4 0
0 0 1 0
0 2 0 5
4 0 0 0
B
3 0 4 0
0 0 1 0
0 2 0 5
4 0 0 0
A
3 0 4 0
0 0 1 0
0 2 0 5
4 0 0 0
B
98 0 4 0
0 0 1 0
0 2 0 5
4 0 0 0