I am answering my question. I got a chance to talk to the people who implemented the random forest in sci-kit learn. Here is the explanation:
bootstrap=False, then each tree is built on all training samples.
bootstrap=True, then for each tree, N samples are drawn randomly with replacement from the training set and the tree is built on this new version of the training data. This introduces randomness in the training procedure since trees will each be trained on slightly different training sets. In expectation, drawing N samples with replacement from a dataset of size N will select ~2/3 unique samples from the original set. "
From Scikit Learn v0.22, you can still use boostraping but limit the maximum number of samples each tree is trained on (
Excellent sources on this subject for more details: