Persistent Data Structure
In normal DS when we change or update a particular value the entire DS gets changed. Consider an array arr = [1, 2, 3, 4, 4], now if we want to update arr[2] to 6 it will become [1, 2, 6, 4, 4]. This final array now lost its pervious state. But in case of Persistent DS it will preserve it's previous states as well. 
Persistent Datastructure preserves all versions of itself
- Every update to the data structure creates a new version
 Update(version, <value>):returns a new version
Types of Persistence
1. Parital Persistence
- Query any versions of the DS
 - Update only the latest version of DS
 
Let's say we have a series of versions as follows (in the form of Linked List):
v1 -> v2 -> v3
Now if we want to make some changes we can only do that to the v3, so after this update we will have
v1 -> v2 -> v3 -> v4
Hence, all the versions will always be linearly ordered (due to the additional constraint)
2. Full Persistence
- Query any versions of the DS (typical of any persistence)
 - Update any version of the DS
 
Let's say initially you only one version v1, and then you make an update you get
v1 -> v2
Now you apply another update but again to v1 (this was not possible in partial persistence) here it will branch off as show below
        v1
       /  \ 
     v2    v3
Again if we update v3 we will get:-
        v1
       /  \ 
     v2    v3
            \
            v4 
Hence, in full persistence the versions will form a tree.
A DS that supports full persistence will always support partial persistence.